如何在ajax中下载文件成功使用laravel响应

问题描述 投票:0回答:1

我正在做一个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。

ajax laravel file download response
1个回答
0
投票

试着在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>.ziphttp://localhost/ems/documents/<zip file name>.zip那你就可以继续下去了。

© www.soinside.com 2019 - 2024. All rights reserved.