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

时间:2020-05-11 19:26:32

标签: ajax laravel file download response

我正在制作一个PDF压缩文件,然后在浏览器中下载。.我已经使用了ajax,并且希望接收文件作为响应,以便我可以下载它。

return response()->download(public_path().'/documents/'.$zipName , $zipName, $headers);

this is the response i m getting

我也尝试过这种方法,但是它不起作用,因为idont知道我缺少什么。

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);

当我将锚点粘贴到新标签中时,锚点会显示文件的正确路径并进行下载。但是当我触发锚点标签时,它将显示 不允许加载本地资源:file:/// C:/xampp/htdocs/ems/public/documents/records-20200512002210.zip

1 个答案:

答案 0 :(得分:0)

尝试在Laravel响应中使用它(如果您正在使用http://localhost:8000或类似的东西访问Web应用程序,其中laravel应用程序的公共目录被设置为文档根目录):

i1 <- with(A, as.logical(ave(as.numeric(Dates), Event,
      FUN = function(x)  all(diff(x) == 1))))
A[i1,]

根据所设置的配置/环境变量,您甚至可以在这里使用 $downloadData = [ 'zipFile' => $zipName, 'headers' => $headers, 'url' => '/documents/'.$zipName ]; return response()->json(['status'=>1,'data'=> $downloadData]); url('/documents/'.$zipName)函数。

route()是Web服务器上的文件资源,前端(JS)应该看不到它。 因此,应该相对于Web应用程序的URI访问要下载的zip文件。

对于您来说,如果浏览器能够访问file:///C:/xampp/htdocs/ems/public/documents/records-20200512002210.ziphttp://localhost:8000/documents/<zip file name>.zip之类的东西,那么您可以继续进行下去。