首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel下载文件不会触发客户端上的下载,即使它正在发送文件

Laravel下载文件不会触发客户端上的下载,即使它正在发送文件
EN

Stack Overflow用户
提问于 2019-07-30 02:34:02
回答 3查看 338关注 0票数 0

我正在调用laravel控制器中的一个方法,该方法返回一个我想要下载到浏览器的文件。该文件是音频文件。下面是控制器:

代码语言:javascript
运行
复制
    public function getAudioFile(Request $request)
{
    //This is the id we are looking to pull
    $uid = $request->uniqueid;
    $audioServices = new AudioServices();
    $pathToFile = $audioServices->getWavFile($uid);
    $name = $uid . '.wav';
    return Response::download($pathToFile, $name);
}

一切都很好。并将文件返回给浏览器,但它不会在浏览器中触发实际的下载文件事件。响应只是驻留在内存中。下面是生成的响应:

代码语言:javascript
运行
复制
Accept-Ranges: none
Cache-Control: public
Connection: keep-alive
Content-Disposition: attachment; filename=1563974948.9449586.wav
Content-Length: 6409004
Content-Type: audio/x-wav
Date: Mon, 29 Jul 2019 18:23:47 GMT
Last-Modified: Mon, 29 Jul 2019 18:23:44 GMT
Server: nginx/1.14.0 (Ubuntu)
<snip>

如果我尝试预览响应,我可以看到wav文件的二进制数据。但是,firefox和chrome实际上都没有‘打包’该文件并将其存储在它们的下载目录中。

我确信我错过了一些小东西,但我已经花了两个小时没有取得任何进展。有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2019-07-30 03:52:18

我终于发现了问题所在。对控制器的调用来自ajax调用。由于某些原因,当返回的是可下载的文件时,这会导致问题。这个解决方案很笨拙。我将对控制器的每个调用(因为它是一个包含许多文件链接的表)包装在一个表单元素中,并去掉了干净的ajax单击功能。笨拙-但它是有效的。谢谢你的建议。

票数 1
EN

Stack Overflow用户

发布于 2019-07-30 03:34:07

我总是使用头文件,所以客户端浏览器知道内容类型。你能试一次这个吗。

代码语言:javascript
运行
复制
$headers = [ 'Content-Type' => 'audio/wav', ];
return response()->download($pathToFile, $name, $headers);
票数 0
EN

Stack Overflow用户

发布于 2019-07-30 18:11:31

//尝试一下

公共函数downloadAudiobook($id) {

if (Auth::user())

代码语言:javascript
运行
复制
    {
        $userID = Auth::user()->id;
        $download = AudiobookDownload::where(['user_id' => $userID, 'audiobooks_id' => $id])->first();


       if (empty($download->user_id))
        {

            $download = new AudiobookDownload;
            $download->user_id = $user_id;
            $download->audiobooks_id = $id;
            $download->save();

        }

       $audiobook = AudioBook::find($id);


        $download = public_path().'/uploads/audiobooks/audiobook_location/' . $audiobook->audiobook_location;

return response()->download($download);} else { return redirect()->route(‘->download’)->with(‘validate’,'success');}}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57259624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档