使用响应::d ownload在laravel中下载文件

2022-08-30 07:41:19

在Laravel应用程序中,我正在尝试实现一个内部视图的按钮,该按钮可以允许用户下载文件而无需导航到任何其他视图或路由 现在我有两个问题:(1)下面的函数抛出

The file "/public/download/info.pdf" does not exist

(2)下载按钮不应将用户导航到任何地方,而只是在同一视图上下载文件,我的当前设置,将视图路由到“/下载”

以下是我试图实现的目标:

按钮:

  <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="./download/info.pdf";
        return Response::download($file);
}

答案 1

试试这个。

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

    $headers = array(
              'Content-Type: application/pdf',
            );

    return Response::download($file, 'filename.pdf', $headers);
}

"./download/info.pdf"将不起作用,因为您必须提供完整的物理路径。

更新 20/05/2016

Laravel 5、5.1、5.2 或 5.* 用户可以使用以下方法代替外观。但是,我之前的答案适用于Laravel 4或5。(数组结构更改为关联数组 - 删除了“Content-Type”之后的冒号 - 如果我们不进行这些更改,则标题将以错误的方式添加:标题的名称将从0,1开始,...)Response$header=>

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

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

答案 2

文件下载在Laravel 5中非常简单。

如前所述@Ashwani Laravel 5允许文件下载,并返回文件进行下载。我们不再需要弄乱任何标头。要返回文件,我们只需:response()->download()

return response()->download(public_path('file_path/from_public_dir.pdf'));

从控制器内部。


可重复使用的下载路由/控制器

现在,让我们创建一个可重用的文件下载路由和控制器,以便我们可以服务器目录中的任何文件。public/files

创建控制器:

php artisan make:controller --plain DownloadsController

在 中创建路由:app/Http/routes.php

Route::get('/download/{file}', 'DownloadsController@download');

在中制作下载方法:app/Http/Controllers/DownloadsController

class DownloadsController extends Controller
{
  public function download($file_name) {
    $file_path = public_path('files/'.$file_name);
    return response()->download($file_path);
  }
}

现在只需将一些文件放在目录中,您就可以通过链接到 :public/files/download/filename.ext

<a href="/download/filename.ext">File Name</a> // update to your own "filename.ext"

如果你拉入了Laravel Collective的Html包,你可以使用Html外观:

{!! Html::link('download/filename.ext', 'File Name') !!}

推荐