PHP标题下载(Laravel)

时间:2015-08-04 07:44:06

标签: php laravel header

我有一个简单的问题。我正在尝试使用标题下载(另存为对话框窗口)从服务器下载文件。我的代码:

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:\盘上也是如此,但我没有设法让它工作。请有人帮帮我吗?

1 个答案:

答案 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));