我正在做一个PDF的压缩文件,然后在浏览器中下载它......我已经使用了ajax,并希望在响应中接收文件,以便我可以下载它。
return response()->download(public_path().'/documents/'.$zipName , $zipName, $headers);
我也试过这个方法,但是没有成功,不知道我错过了什么。
Laravel响应:
$downloadData = [
'zipFile' => $zipName,
'headers' => $headers,
'url' => public_path('documents/').$zipName
];
return response()->json(['status'=>1,'data'=> $downloadData]);
AJAX成功:
var a = document.getElementById('zipDownload');
a.href = data.data.url;
a.target = '_blank';
a.download = data.data.zipFile;
setTimeout(function() {
a.click();
}, 200);
锚是显示正确的路径的文件和下载,当我粘贴在一个新的标签...但当我触发锚标签,它显示Not allowed to load local resource: file:/C:xampphtdocsemspublicdocumentsrecords-20200512002210.zip。
试着在Laravel的响应中使用这个功能(如果你是在访问web应用时使用了 http:/localhost:8000 或类似的东西,其中laravel应用程序的公共目录被设置为文档根目录)。)
$downloadData = [
'zipFile' => $zipName,
'headers' => $headers,
'url' => '/documents/'.$zipName
];
return response()->json(['status'=>1,'data'=> $downloadData]);
这里你甚至可以使用 url('/documents/'.$zipName)
或 route()
函数,取决于已经设置的configationsenvironment变量。
file:///C:/xampp/htdocs/ems/public/documents/records-20200512002210.zip
是一个在web服务器上的文件资源,前端(JS)不应该看到它。所以,你要下载的zip文件应该相对于web应用程序的URI来访问。
在你的情况下,如果浏览器能够访问类似于 http://localhost:8000/documents/<zip file name>.zip
或 http://localhost/ems/documents/<zip file name>.zip
那你就可以继续下去了。