Laravel如何处理文件下载请求?(Response示例)

admin 百科 12
Laravel 文件下载核心是 response()->download() 方法返回带正确 HTTP 头的响应。基础下载需确保本地文件存在且可读,推荐用 storage_path() 或 public_path() 构建绝对路径;动态生成下载用 streamDownload() 配合闭包输出内容;安全下载须校验权限并从 private 目录读取后流式响应;注意中文文件名编码、大文件内存限制及 Web 服务器配置。

Laravel如何处理文件下载请求?(Response示例)-第1张图片-佛山资讯网

在 Laravel 中处理文件下载请求,核心是使用 response()->download() 方法返回一个带有正确 HTTP 头的响应,触发浏览器下载行为。

基础下载:本地文件路径

最常见场景是提供项目中已存在的文件(如 storage/app 或 public 目录下的文件)供用户下载。

  • 确保文件存在且可读,否则会抛出 Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException
  • 推荐使用 storage_path()public_path() 构建绝对路径
  • 可选传入第二个参数指定下载时的文件名(含扩展名)
示例:

return response()->download(storage_path('app/reports/2024-summary.pdf'), '年度报告.pdf');

登录后复制

动态生成后即时下载(如 Excel、PDF)

不保存到磁盘,而是生成内容后直接流式响应。适合导出报表、生成临时凭证等场景。

  • response()->streamDownload() 接收一个闭包,闭包内输出原始内容(如用 fputcsv 写 CSV,或用 Dompdf/TCPDF 渲染 PDF)
  • 需手动设置 Content-TypeContent-Disposition
  • 注意内存和超时限制,大文件建议改用临时存储 + redirect 方式
示例(CSV 下载):

$data = [['姓名', '邮箱'], ['张三', 'zhang@example.com']];<br>return response()->streamDownload(function () use ($data) {<br>    $fp = fopen('php://output', 'w');<br>    foreach ($data as $row) {<br>        fputcsv($fp, $row);<br>    }<br>    fclose($fp);<br>}, 'users.csv', [ <br>    'Content-Type' => 'text/csv',<br>]);

登录后复制

标签: php excel laravel js 前端 json apache nginx 编码 浏览器 app csv amd

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~