PHP 下载文件

需求:页面提交form表单,后端php根据表单数据下载文件到本地

思路:页面ajax提交form表单,后端php根据表单数据到数据库查找文件(多个文件),所有文件下载到服务器,然后压缩,ajax返回压缩文件路径,页面location.href下载

困惑:如果下载的文件比较大比如几十兆~几百兆,表单数据提交后后端一直在处理下载,时间较长,页面会处于无响应的状态,直到后端下载到服务器完成后,页面才会响应。

大家有没有关于这个需求的想法或建议,或者有没有比较好的组件推荐,谢谢~

阅读 3.1k
3 个回答

可以使用websoket 后台使用任务消息队列 不会影响当次请求,当队列执行完成主动通知客户端,并将生成好的连接返回

首先有个疑问,文件不跟后端代码在一个服务器上?

所有文件下载到服务器

这个意思是,服务端根据数据库查出的文件标识先到别的地方下载文件,然后打包么?

前端页面无响应这个是值获取响应时间过长吧,可以在发出请求之后添加loading提升用户体验效果。

你可以使用函数fastcgi_finish_request()来给用户反馈“文件正在下载中,请稍候...”

此时服务器已经响应了用户的请求,但是异步返回结果;

后端下载进程继续执行下载,下载完毕后,客户端ajax定时程序再次请求发现文件准备完毕,就提示用户可以下载了。

也可以通过Push来主动告知浏览器下载完成。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题