在laravel中下载后删除文件

时间:2014-10-10 09:12:54

标签: php laravel

我正在创建一个允许用户下载文件的应用程序。下载后我想删除文件。我的代码结尾是这样的:

return Response::download(public_path() . '/uploads/_tmp/' . urldecode($filename));

表示函数在返回时结束,我无法删除该文件。我试过打电话给'之后'过滤路线,但文件会被快速删除。

有什么想法吗?

7 个答案:

答案 0 :(得分:30)

您可以使用deleteFileAfterSend http://laravel.com/docs/5.0/responses#other-responses

return response()->download($filePath, $fileName, $headers)->deleteFileAfterSend(true);

答案 1 :(得分:18)

我个人使用以下内容;

$response = Response::make(file_get_contents($path_to_file), $status_code, $headers);

状态代码显然是您要返回的代码。

在$ header参数中,您可以传递一个索引为Content-Type和Content-Disposition的数组。

然后你可以简单地取消链接$ path_to_file并返回$ response。


更简单的删除文件的方法是使用Jon的Laravel版本答案> 4.0。

您可以使用deleteFileAfterSend http://laravel.com/docs/5.0/responses#other-responses

return response()->download($filePath, $fileName, $headers)->deleteFileAfterSend(true);

答案 2 :(得分:5)

$filename = storage_path() . '/testing.txt';

App::finish(function($request, $response) use ($filename)
{
    unlink($filename);
});

return Response::download($filename);

答案 3 :(得分:3)

只需使用以下代码:

return response()->download($file_path)->deleteFileAfterSend(true);

在这里,在下载功能内部,文件路径将作为参数传递。举例来说,您想将数据库备份到一个文件中,并且还想通过下载删除它:

$date = Carbon::now()->format('Y-m-d_h-i');
$pub_path = public_path();
$file_path = $pub_path . '/application/db_backups/' . $date . '.sql';
$output = shell_exec('mysqldump -h58.84.34.65 -uwsit -pwsit97480 websms > ' . $file_path);
return response()->download($file_path)->deleteFileAfterSend(true);

答案 4 :(得分:1)

如果下载后想删除源文件,直接写如下

return response()->download($filePath)->deleteFileAfterSend(true);

答案 5 :(得分:0)

对于 Laravel 5.8,使用 stream download。在回调函数中,回显内容后删除文件。

我们来看看解决方案:


return response()->streamDownload(function () use ($pathToTheFile) {
    echo Storage::get($pathToTheFile);
    Storage::delete($pathToTheFile);
}, 'my-awesome-file-name');

<块引用>

我不知道它是否适用于最旧的或最新的版本。

答案 6 :(得分:-6)

unlink('./path/filename.extension');