我希望我的用户下载.csv文件。
控制器中的代码可在本地计算机和开发服务器上完美运行。但是,它在生产服务器上不起作用。
框架为Laravel 5.5.44
PHP版本为7.2
$videos = Video::whereNotNull('title')->get();
//First row for labels
$list = array([
'id' => 'Video ID',
'director' => 'Director',
'title' => 'Title',
]);
foreach($videos as $video) {
$list[] = [
'id' => $video->id,
'director' => $video->director,
'title' => $video->title,
];
}
$today = date('Ymd');
$filename = $today.'-list.csv';
$fp = fopen(storage_path($filename), 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
return response()->download(storage_path($filename));
在生产服务器上触发控制器时,我得到:
prod.ERROR: The content cannot be set on a BinaryFileResponse instance.
而不是下载文件。
我刚刚注意到,只有将应用程序环境设置为正式版时,才会引发异常。
通过设置,我能够在本地计算机上重现该行为
APP_ENV=prod
在.env
文件中。
我很困惑。我在官方文档中找不到足够的信息,但我仍然不知道如何解决这个奇怪的问题。
答案 0 :(得分:1)
您的AfterMiddleware
试图在Response上设置内容,而您无法对BinaryFileResponse
对象执行此操作,对setContent
的任何调用都会导致此错误。
您将必须确定是否需要使用的vrkansagara/lara-out-press
中间件。