我正在创建一个允许用户下载文件的应用程序。下载后我想删除文件。我的代码结尾是这样的:
return Response::download(public_path() . '/uploads/_tmp/' . urldecode($filename));
表示函数在返回时结束,我无法删除该文件。我试过打电话给'之后'过滤路线,但文件会被快速删除。
有什么想法吗?
答案 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');