我正在研究媒体资产管理系统。我希望用户能够使用文件的宽度,高度,扩展名和色彩空间填写表格,然后转换图像并将其作为下载内容提供。
我可以通过使用新创建的文件的URL响应Post-Request来使其工作。
我想要的是在下载后或一段时间后删除该文件。 (或者最好是使用laravels download()响应的方法,我显然不能在Axios / Ajax发布请求中使用它。)
感谢您的帮助:)
答案 0 :(得分:0)
对我来说,我喜欢使用cron处理这种情况
您可以阅读详细信息here
添加任何列以检查其是否已下载(例如,状态为0或1)
,您可以在模型上创建访问器以计算日期差异
public function getRangeDateAttribute(){
$today = Carbon::now()->startOfDay();
$downloadDate = $this->created_at;
$datediff = $today->diffInDays($downloadDate);
return $datediff
}
然后在任务计划中添加示例代码:
if($media->status == 1 || $media->rangeDate > 7 ){ //checking the status & range date passed specific days you wanted
do whatever you wanted here
}
答案 1 :(得分:0)
有两种方法可以做到这一点。
假设您在storage/app/download.zip
中有一个文件:
1。。由于Laravel在内部使用Symfony的HttpFoundation,因此您可以使用deleteFileAfterSend
方法:
public function download()
{
return response()
->download(storage_path('app/download.zip'))
->deleteFileAfterSend(true);
}
2。。创建一个Terminable Middleware,在准备好下载响应后删除该文件。
class StorageDownload
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request);
}
public function terminate($request, $response)
{
\Storage::delete('download.zip');
}
}
您需要register the middlware和assign it to your route才能正常工作。
对于使用JavaScript触发下载,可以使用设置窗口位置这样简单的方法:
axios
.post('files/export/' + file.id, formData)
.then(function() {
window.location = 'files/download/' + file.id
});
请放心,这不会离开当前页面,只会触发下载。