ajax post下载flask文件流以及中文文件名问题
ajax post下载文件
后端返回文件流,flask中可使用 return send_file
(文件路径) 返回二进制文件流,在headers中传送文件相关信息(如文件名)。
前端使用 url.createobjecturl() 创建创建一个 domstring url对象,创建一个 a 节点,将url对象赋给a节点的 href 属性,最后调用 click() 方法点击该 a 节点即可弹出浏览器下载框。
展示图片
方法同上,将 a 改成 img , href 改成 src 即可,将url对象写入到目标img标签的src即可。
另一种方法是后端返回图片转base64的字符串,src的值形如 "data:image/svg+xml;base64,${base字符串}"
。(这里的 svg+xml 表示图片格式是svg,如果是png则改成png)
中文文件名乱码
http headers中直接传输中文文件名,比较简单的方法是后端进行url转码(这里使用python的 urllib.parse.quote ),前端使用 decodeuri()
解码。
此外还可以设置headers的 content-disposition: attachment; filename*=utf-8''xxxxx
,不过兼容性嘛……麻烦还不如直接urlcode算了,而且也懒得设置 content-disposition 了,前端从 content-disposition
中取 filename 也是够麻烦的,会取到一长串字符串然后自己再想办法取出来 filename= 后面的信息。
代码如下:
flask
ps:flask下载文件---文件流
html:
<a name="downloadbtn" class="btn btn-success pull-right" href="/downloadfile/?filename=/root/allfile/123.txt">下载</a>
py:
没有文件名,和文件格式,遇到这种情况,打开f12,查看response.headers 与正常的比较
总结
到此这篇关于ajax post下载flask文件流以及中文文件名的文章就介绍到这了,更多相关ajax post下载flask文件流内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!