[英]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.