用户可以下载 CSV 格式的查询结果。文件很小(几 KB),但内容很重要。
第一种方法是使用 php 输出缓冲区php://:
$callback = function() use ($result, $columns) {
$file = fopen('php://output', 'w');
fputcsv($file, $columns);
foreach($result as $res) {
fputcsv($file, array($res->from_user, $res->to_user, $res->message, $res->date_added));
}
fclose($file);
};
return response()->stream($callback, 200, $headers);
第二种方法是在 laravel 存储系统中创建一个新文件夹并将其设置为私有并从那里下载文件。您甚至可以在下载后删除文件:
'csv' => [
'driver' => 'local',
'root' => storage_path('csv'),
'visibility' => 'private',
],
这是创建/下载代码:
$file = fopen('../storage/csv/file.csv', 'w');
fputcsv($file, $columns);
foreach($result as $res) {
fputcsv($file, array($res->from_user, $res->to_user, $res->message, $res->date_added));
}
fclose($file);
return response()->make(Storage::disk('csv')->get('file.csv'), 200, $headers);
此返回将在下载后立即删除文件:
return response()->download(Storage::disk('csv')->path('file.csv'))
->deleteFileAfterSend(true);
什么会更安全?更好的方法是什么?我目前倾向于使用存储的第二种方法。
芜湖不芜
拉风的咖菲猫
明月笑刀无情