代码之家  ›  专栏  ›  技术社区  ›  POV

如何说浏览器开始下载文件?

  •  0
  • POV  · 技术社区  · 5 年前

    使用客户端,我向Laravel发送请求以将文件返回浏览器:

    $headers = [
                 'Content-Type' => 'application/vnd.ms-excel',
                 'Content-Disposition' => "attachment; filename='Report.xls'"
            ];
    
            return response()->download(storage_path('app/'.$path.$filename), $filename, $headers);
    

    它返回二进制文件作为响应:

    enter image description here

    响应头为:

    enter image description here

    0 回复  |  直到 5 年前
        1
  •  1
  •   loic.lopez    5 年前

    尝试使用:

    return Storage::download('file.jpg', $name, $headers);
    

    参考文献: https://laravel.com/docs/5.8/filesystem#downloading-files

    编辑1:

    可能的解决方案:

    创建一个按其名称获取XLS文档(使用get-http方法)的路由,例如返回:

    返回storage::download('file.jpg',$name,$headers);
    

    执行post请求,返回 204 HTTP代码和 Location 标题。

    return response()->header('Location', $url)
    

    当调用Ajax成功事件时,请执行以下操作:

    success: function(data, textStatus, request) {
        window.open(request.getResponseHeader('Location'), '_blank');
    }