我正在将我的laravel应用程序迁移到laravel 9。然后我注意到响应()->download()现在返回错误的文件名和mime类型。
$headers = [
'Content-Description' => 'File Transfer',
'Content-Type' => 'application/zip',
];
return response()
->download($result,'test.zip',$headers)
->deleteFileAfterSend(true);
字符串
在我的浏览器上,它将返回文件名为“file.txt”,但内容是正确的,将file.txt重命名为file.zip然后文件可访问。
其他信息:
- 我确实运行了debug,在Response::sendHeaders()中,正确发送的每个头项都包含Content-Disposition:attachment;filename=test.zip
- 系统升级前:PHP 7.3,Laravel 7.30
- 升级后:PHP 8.2,Laravel 9.5
- [更新]这个问题只发生在服务器脚本(php artisan serve)上运行时,同时在web服务器(apache)上运行时正确返回文件名
1条答案
按热度按时间brc7rcf01#
我有类似的问题,浏览器尝试各种优化。
如果您希望浏览器只是下载,而不需要基于文件类型的特殊处理,那么可以尝试以下操作:
字符串
注意,上面的假是最危险的文件类型,这迫使浏览器应用程序格外谨慎,只需下载文件(没有花哨的特殊处理)。
另外,
Content-Length
可能已经被Laravel设置了,但我想确保下载是可恢复的。