繁体   English   中英

在laravel中下载后删除文件

[英]Deleting files after download in laravel

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

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

这意味着该函数在返回时结束,我无法删除该文件。 我试图在路由上调用“之后”过滤器,但随后文件被快速删除。

有任何想法吗?

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

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

我个人使用以下内容;

$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);
$filename = storage_path() . '/testing.txt';

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

return Response::download($filename);

只需使用这行代码:

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

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

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

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

我们来看看解决方法:


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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM