Larvel下载文件执行失败

发布于 2022-09-12 03:58:49 字数 555 浏览 17 评论 0

现在有个需求是导出文件,后台逻辑这边是写入文件,写入完后执行return response()->download()下载到用户机上,但是由于导出时间可能比较长,在这个时间段内用户是不能进行其他操作的,为了进行优化,随即将导出逻辑放到异步队列里,但是在队列里不能执行return response()->download(),虽然想到了监听这个队列是否完成,即是否已经写入文件了,如果写入文件了就return response()->download(),所以用到了laravel的任务事件,但是任务事件执行逻辑是一个闭包,在闭包里执行return response()->download()一样是无效的,本人新手一枚,各位大神有其他方案或更好的想法吗。
1596353164(1).jpg
1596353224(1).jpg

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

遗心遗梦遗幸福 2022-09-19 03:58:50

? 你这是个错误的队列使用方式呐。

1、当用户点击导出时,在后台生成一个 taskId ,然后传递给队列。
2、把 taskId 返回个客户端,客户端使用 taskId 轮询一个查询是否生成成功的接口。
3、队列中文件生成成功后,把下载地址放进相应的 taskId 。
4、客户端查到完成后,拿到下载地址,提醒用户转到下载页面进行下载。

泪意 2022-09-19 03:58:50

其实把用户逻辑拆成两部就好了,我们之前又个和你这比较接近的业务场景,要给商家生产报表内服务,生产报表需要离线分析系统,所以时间比较长,但是并不是所有商家都会要这个报表.所以商家后台报表服务就变成了商家请求生成报表,将报表生成请求丢入队列,页面显示生成中,提示大概多长时间后来下载,后续进入页面只要报表没生存好都是提示生成中,生成完毕后页面才会显示下载地址
按你设计,前半部分就已经对了,后半部分想队列里返回下载就错了,应该是队列里把生成好的文件地址写入存储或者数据库,通知或者不通知用户都行,但是要用户自己来下载就好,当然你用邮件附件或者链接发给用户也可以

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文