我希望我的用户下载一个.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文件中。
我很困惑。我无法在官方文档中找到足够的信息,我仍然不知道如何解决这个奇怪的问题。
发布于 2019-11-05 21:21:14
您的AfterMiddleware试图在响应上设置内容,这是您不能对BinaryFileResponse对象执行的,任何对setContent的调用都会导致此错误。
您必须弄清楚是否需要正在使用的vrkansagara/lara-out-press中间件。
https://stackoverflow.com/questions/58719230
复制相似问题