您好我尝试使用laravel StreamedResponse块方法将大表(100 000行导出到CSV文件中)。如果下面粘贴的代码不能正常工作并显示以下错误。
找不到文件Firefox无法找到该文件 http://laravel/allExport2。检查文件名是否大写或 其他打字错误。检查文件是否已移动,重命名或 删除。
控制器
use Symfony\Component\HttpFoundation\StreamedResponse;
$headers = array(
'Content-Type' => 'text/csv',
'Cache-Control' => 'must-revalidate, post-check=0, pre-check=0',
'Content-Disposition' => 'attachment; filename=test.csv',
'Expires' => '0',
'Pragma' => 'public',
);
$response = new StreamedResponse(function(){
// Open output stream
$handle = fopen('php://output', 'w');
// Add CSV headers
fputcsv($handle, [
"invoice_number",
"title",
]);
Order::chunk(500, function($orders) use($handle) {
foreach ($orders as $user) {
// Add a new row with data
fputcsv($handle, [
$user->invoice_number,
$user->courtesy_title,
]);
}
});
// Close the output stream
fclose($handle);
}, 200, $headers);
return $response->send();
答案 0 :(得分:-1)
好的,您的浏览器收到了404错误。
有几个原因。
检查您的路线,确认您尝试访问现有路线。另请注意,路由区分大小写。这意味着Route::get('SuPeRCRaZyPaGe', function (){...})
或/supercrazypage
将无法访问/SuperCrazyPage
。
检查中间件,可能会抛出未找到的异常或abort(404)
。
检查您的代码,如果您正在使用Eloquent模型,并且遇到findOrFail
或firstOrFail
个案例。检查它们,它们可以抛出ModelNotFoundException(转换为404错误)。
当然,请不要忘记检查laravel的日志(~/storage/logs/laravel.log
)并启用调试设置。