现在有个需求是导出文件,后台逻辑这边是写入文件,写入完后执行return response()->download()
下载到用户机上,但是由于导出时间可能比较长,在这个时间段内用户是不能进行其他操作的,为了进行优化,随即将导出逻辑放到异步队列里,但是在队列里不能执行return response()->download()
,虽然想到了监听这个队列是否完成,即是否已经写入文件了,如果写入文件了就return response()->download()
,所以用到了laravel的任务事件,但是任务事件执行逻辑是一个闭包,在闭包里执行return response()->download()
一样是无效的,本人新手一枚,各位大神有其他方案或更好的想法吗。
? 你这是个错误的队列使用方式呐。
1、当用户点击导出时,在后台生成一个 taskId ,然后传递给队列。
2、把 taskId 返回个客户端,客户端使用 taskId 轮询一个查询是否生成成功的接口。
3、队列中文件生成成功后,把下载地址放进相应的 taskId 。
4、客户端查到完成后,拿到下载地址,提醒用户转到下载页面进行下载。