我正在调用laravel控制器中的一个方法,该方法返回一个我想要下载到浏览器的文件。该文件是音频文件。下面是控制器:
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);
}一切都很好。并将文件返回给浏览器,但它不会在浏览器中触发实际的下载文件事件。响应只是驻留在内存中。下面是生成的响应:
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实际上都没有‘打包’该文件并将其存储在它们的下载目录中。
我确信我错过了一些小东西,但我已经花了两个小时没有取得任何进展。有什么想法吗?
发布于 2019-07-30 03:52:18
我终于发现了问题所在。对控制器的调用来自ajax调用。由于某些原因,当返回的是可下载的文件时,这会导致问题。这个解决方案很笨拙。我将对控制器的每个调用(因为它是一个包含许多文件链接的表)包装在一个表单元素中,并去掉了干净的ajax单击功能。笨拙-但它是有效的。谢谢你的建议。
https://stackoverflow.com/questions/57259624
复制相似问题