【问题标题】:How Do I return a file for download in Laravel如何在 Laravel 中返​​回文件以供下载
【发布时间】:2017-09-12 17:24:35
【问题描述】:

我需要能够为用户提供下载文件,因此我创建了一条路线(除非我可以在刀片中为特定用户的简历创建链接)。我的文件存储在storage/app/cv/ 目录中。我这样创建了一条路线:

Route::get('test', function() {
    $destinationPath = config('app.CVDestinationPath') . "/static_file.pdf";
    $uploaded = Storage::get($destinationPath);
    return $uploaded;
}

但是这条路线给了我一个奇怪的输出。我认为它是文件,但它正在将文件转换为 html 或其他东西。谁能帮我返回文件(可以是 pdf、doc、docx 或纯文本)。我的文件没有存放在公共目录中!

【问题讨论】:

  • @Dekel 是的,我在发布问题之前尝试这样做,当时我尝试执行该代码。它说该文件不存在。
  • 哪个文件不存在?
  • 我正在尝试返回一个静态文件,该文件存储在 myProject\storage\app\cv 目录中,它的名称是static_file.pdf

标签: php laravel file laravel-5


【解决方案1】:

由于该文件未上传到公共目录,因此需要您先使用存储方式访问该文件,然后再返回响应。

$destinationPath = config('app.CVDestinationPath') . "/static_file.pdf";
$uploaded = Storage::get($destinationPath);

return (new \Illuminate\Http\Response($uploaded))->header('Content-Type', 'application/pdf');

确保返回带有内容类型的标题,否则文件将不是可接受的格式。

【讨论】:

    【解决方案2】:

    您可以使用“响应”来帮助您下载标题:

       <?php
    
       use Illuminate\Support\Facades\Response;
       Route::get('test', function() {
          $destinationPath = config('app.CVDestinationPath') . "/static_file.pdf";
          return response()->download($destinationPath);
       }
       ?>
    

    查看此链接https://laravel.com/docs/5.5/responses#file-downloads 以了解更多信息,例如response-&gt;file($destinationPath) 强制浏览器使用其本地插件向用户显示文件(在您的情况下为 .pdf)。

    【讨论】:

    • 欢迎来到 StackOverflow HolyMarcell,此答案与将其标记为重复的问题完全相同。不需要这样的答案。当您获得足够的声誉时,您将能够将问题标记为重复。花点时间,给出一些答案并获得相关排名:)
    • 啊...我根本没有看到重复标记。我的回答仍然比其他线程中的更简洁;)
    • @Dekel,我在这里遗漏了一些东西;它根本不是完全重复的。
    • @ChrisForrence response()-&gt;download 是答案,据我所知...这是 dup 中存在的内容
    • @Dekel 答案解决了 cmets 中的问题;真正的问题是 php_fileinfo 没有被启用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多