需求:页面提交form表单,后端php根据表单数据下载文件到本地
思路:页面ajax提交form表单,后端php根据表单数据到数据库查找文件(多个文件),所有文件下载到服务器,然后压缩,ajax返回压缩文件路径,页面location.href下载
困惑:如果下载的文件比较大比如几十兆~几百兆,表单数据提交后后端一直在处理下载,时间较长,页面会处于无响应的状态,直到后端下载到服务器完成后,页面才会响应。
大家有没有关于这个需求的想法或建议,或者有没有比较好的组件推荐,谢谢~
需求:页面提交form表单,后端php根据表单数据下载文件到本地
思路:页面ajax提交form表单,后端php根据表单数据到数据库查找文件(多个文件),所有文件下载到服务器,然后压缩,ajax返回压缩文件路径,页面location.href下载
困惑:如果下载的文件比较大比如几十兆~几百兆,表单数据提交后后端一直在处理下载,时间较长,页面会处于无响应的状态,直到后端下载到服务器完成后,页面才会响应。
大家有没有关于这个需求的想法或建议,或者有没有比较好的组件推荐,谢谢~
首先有个疑问,文件不跟后端代码在一个服务器上?
所有文件下载到服务器
这个意思是,服务端根据数据库查出的文件标识先到别的地方下载文件,然后打包么?
前端页面无响应
这个是值获取响应时间过长吧,可以在发出请求之后添加loading提升用户体验效果。
你可以使用函数fastcgi_finish_request()来给用户反馈“文件正在下载中,请稍候...”
此时服务器已经响应了用户的请求,但是异步返回结果;
后端下载进程继续执行下载,下载完毕后,客户端ajax定时程序再次请求发现文件准备完毕,就提示用户可以下载了。
也可以通过Push来主动告知浏览器下载完成。
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
3 回答837 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
可以使用websoket 后台使用任务消息队列 不会影响当次请求,当队列执行完成主动通知客户端,并将生成好的连接返回