我正在生成一个CSV,我希望Laravel强制下载,但the documentation只提到我可以下载服务器上已经存在的文件,我希望不将数据保存为文件.

I managed to make this (which works), but I wanted to know if there was another, neater way.

    $headers = [
        'Content-type'        => 'text/csv',
        'Content-Disposition' => 'attachment; filename="download.csv"',
    ];
    return \Response::make($content, 200, $headers);

I also tried with a SplTempFileObject(), but I got the following error : The file "php://temp" does not exist

    $tmpFile = new \SplTempFileObject();
    $tmpFile->fwrite($content);

    return response()->download($tmpFile);

推荐答案

为更干净的内容处理/laravel方法打response macro

Add the following to your App\Providers\AppServiceProvider boot method

\Response::macro('attachment', function ($content) {

    $headers = [
        'Content-type'        => 'text/csv',
        'Content-Disposition' => 'attachment; filename="download.csv"',
    ];

    return \Response::make($content, 200, $headers);

});

then in your controller or routes you can return the following

return response()->attachment($content);

Laravel相关问答推荐

我是否需要/是否可以从控制器运行LARLAVEL备份?

如何在 Laravel 中获取特定月份的最后一个日期?

laravel vue 惯性分页器删除上一个和下一个链接

Laravel:在 PHPUnit 的覆盖率报告中包含文件夹(如果在 app/ 文件夹之外)?

从 Laravel Session 数组中删除项目

Laravel 中的 index()" 是什么意思?

Laravel timestamps() 不会创建 CURRENT_TIMESTAMP

Laravel 4 的 Cron 作业(job)

laravel 5 - assets资源 list 中未定义 css 文件?

向 Docker 上的 Artisan 推荐方式

如何在本地 Laravel Homestead 站点上获取 https 证书

Laravel 存储文件的公共 url

数组的旧输入?

laravel 4:更新行时如何从列的当前值中减一?

Filesystem.php 中的 ErrorException

在 Laravel 的数据透视表中添加 id 列有什么好处?

laravel 队列 - 同步驱动程序如何工作?它是在单独的进程/线程还是主执行线程中执行?

如何在 Laravel Mix 中将公共路径更改为包含下划线的内容?

Laravel Route 模型与关系绑定

如何在laravel中 for each 用户生成唯一的随机值并将其添加到数据库中