[求助] Flask 如何实现 ajax 提交数据,后端生成 csv 文件并显示文件下载

2016-05-27 16:35:56 +08:00
 Stitch
需求是:根据前端提交的数据 id ,后端从数据库中获取完整数据,生成 csv 文件,然后供下载

1 、页面展示了一个表格,第一列为 checkbox
2 、下载按钮调用 jquery 代码,获取选择的 checkbox 数据,然后用 ajax 提交到后端
3 、后端接收到数据 id 后,查询完整数据,生成 csv 文件
4 、展示下载界面,供用户下载数据文件。

调试一天,没有找到比较好的解决方案。

现在遇到的问题是:
1 、 ajax 无法下载文件
2 、 ajax 一般不使用 302

请高手指导,多谢
4773 次点击
所在节点    Python
3 条回复
domty
2016-05-27 19:24:54 +08:00
1.不用 ajax ,直接作表单提交。然后下载的文件标注好类型信息,内容直接写在返回的 io 流里。
2.把文件在服务器本地化保存,并开放该静态路径以供下载。接口完成后返回静态下载地址链接。 ajax 回调拿到链接后做 window.open()或者界面跳转。
jugelizi
2016-05-28 01:23:31 +08:00
ajax 请求页面 header 输出下载比如
header("Content-type:text/csv");
header("Content-Disposition:attachment;filename=1.csv");
就是直接下载
Stitch
2016-05-30 09:19:18 +08:00
感谢两位的解答,综合了两位的意见,问题已经解决。
最终的解决方案是:
1 、以 ajax 提交需要下载的 id 信息,后端生成 csv 文件,临时保存。
2 、 ajax 接口返回临时文件的名称,以 window.open 打开文件下载链接
3 、文件页面的 header 设置为 @jugelizi 所说的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/281720

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX