如何在Laravel中返回要下载的文件

时间:2017-09-12 17:24:35

标签: php laravel file laravel-5

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

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

然而,这条路线给了我一个奇怪的输出。我认为这是文件,但它将文件转换为HTML或其他东西。任何人都可以帮我退回文件(可能是pdf,doc或docx,或纯文本)。我的文件没有存储在公共目录中!

2 个答案:

答案 0 :(得分:0)

你可以使用"响应"帮助您下载标题:

   <?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->file($destinationPath)强制浏览器使用其lokal插件向用户显示文件(在您的情况下为.pdf)。

答案 1 :(得分:0)

由于文件未在公共目录中上载,因此在返回响应之前,您需要先使用存储方法来访问它。

split(input,'\t')

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