我正在创建一个允许用户下载文件的应用程序.下载后我想删除文件.我的代码结束是这样的:
return Response::download(public_path() . '/uploads/_tmp/' . urldecode($filename));
Run Code Online (Sandbox Code Playgroud)
这意味着函数在返回时结束,我无法删除该文件.我试图在路由上调用'after'过滤器,但之后文件会被快速删除.
有任何想法吗?
Jon*_*Jon 33
您可以使用deleteFileAfterSend http://laravel.com/docs/5.0/responses#other-responses
return response()->download($filePath, $fileName, $headers)->deleteFileAfterSend(true);
Mat*_*row 22
我个人使用以下内容;
$response = Response::make(file_get_contents($path_to_file), $status_code, $headers);
Run Code Online (Sandbox Code Playgroud)
状态代码显然是您要返回的代码.
在$ 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);
Run Code Online (Sandbox Code Playgroud)
只需使用这行代码:
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);
Run Code Online (Sandbox Code Playgroud)
小智 9
如果下载后想删除源文件,只需这样写即可
return response()->download($filePath)->deleteFileAfterSend(true);
Run Code Online (Sandbox Code Playgroud)
小智 5
$filename = storage_path() . '/testing.txt';
App::finish(function($request, $response) use ($filename)
{
unlink($filename);
});
return Response::download($filename);
Run Code Online (Sandbox Code Playgroud)