我有一个简单的问题。我正在尝试使用标题下载(另存为对话框窗口)从服务器下载文件。我的代码:
public function downloadBill()
{
$id = Input::get('post_id');
$db = DB::connection('smsservice');
$file_ = $db->table('bills')->where('id', $id)->pluck('blob');
$filename = 'download.txt';
File::put($filename, base64_decode($file_));
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($filename));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filename));
}
保存为对话框启动,我可以下载文件download.txt,但文件是emtpy 0 kb,这使我得出结论,下载位置不等于保存的“download.txt”的位置。我尝试将文件放到不同的位置,即使在D:\盘上也是如此,但我没有设法让它工作。请有人帮帮我吗?
答案 0 :(得分:1)
Laravel有一个内置的方法来返回下载响应。 response()->download($filePath);
。这将自动http://laravel.com/docs/5.1/responses#file-downloads
我也倾向于使用storage_path()
函数将文件保存到一个明确知道的合适目录中,而不是让PHP将它保存在喜欢的地方。
$filename = storage_path(sprintf('/downloads/%s.txt', $id));