Laravel 响应:返回文件下载 4 个改进

应用场景

用户点击页面上的按钮,即可将文件下载文件到本地。

如何用 Laravel 实现

Laravel 提供的 download() 方法,原理是生成一个下载的响应,访问这个路由时自动下载。

具体实现

页面上的按钮

<a href="/download" class="btn btn-large pull-right">
    <i class="icon-download-alt"> </i> Download Brochure 
</a>

路由

Route::get('/download', 'HomeController@getDownload');

控制器

public function getDownload()
{
    //PDF file is stored under project/public/download/info.pdf
    $file= public_path(). "/download/info.pdf";

    $headers = [
        'Content-Type: application/pdf',
    ];

    return response()->download($file, 'filename.pdf', $headers);
}

参数说明

  • 第一个参数:文件在服务器上的 绝对路径 路径
  • 第二个参数:指定下载后的文件名(可选)
  • 第三个参数:以数组的形式传递 HTTP 头信息(可选)

常见错误

报错信息

LogicException in MimeTypeGuesser.php line 135:
Unable to guess the mime type as no guessers are available (Did you enable the php_fileinfo extension?)

这个错误是 PHP 的 php_fileinfo 扩展没有启用。

解决方法

  1. 打开 php.ini 文件
  2. extension=php_fileinfo.dll 前面的分号去掉
  3. 重启 php-fpm
本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 2

存在oss上的文件下载不了这个怎么处理?

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!