【问题标题】:how to download file in ajax success using laravel response如何使用laravel响应成功下载ajax文件
【发布时间】:2020-08-27 11:12:39
【问题描述】:

我正在制作 PDF 的 zip 文件,然后在浏览器中下载它。我使用了 ajax 并希望收到文件作为响应,以便我可以下载它。

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

this is the response i m getting

我也尝试过这种方法,但它不知道我错过了什么。

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

【问题讨论】:

  • 你能在response()->download()上面试试header('Content-Type: ' . mime_content_type($filepath));吗?

标签: ajax laravel file download response


【解决方案1】:

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

 $downloadData = [
          'zipFile' => $zipName,
          'headers' => $headers,
          'url' => '/documents/'.$zipName
        ];
return response()->json(['status'=>1,'data'=> $downloadData]);

在这里,您甚至可以使用 url('/documents/'.$zipName)route() 函数,具体取决于已设置的配置/环境变量。

file:///C:/xampp/htdocs/ems/public/documents/records-20200512002210.zip 是网络服务器上的文件资源,前端(JS)应该看不到它。 因此,您要下载的 zip 文件应该相对于 Web 应用程序的 URI 进行访问。

在您的情况下,如果浏览器能够访问 http://localhost:8000/documents/<zip file name>.ziphttp://localhost/ems/documents/<zip file name>.zip 之类的内容,那么您可以继续进行。

【讨论】:

    猜你喜欢
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2013-11-14
    相关资源
    最近更新 更多