广告
返回顶部
首页 > 资讯 > 精选 >怎么在ajax中使用post方式下载flask文件流
  • 752
分享到

怎么在ajax中使用post方式下载flask文件流

2023-06-08 06:06:18 752人浏览 八月长安
摘要

本篇文章给大家分享的是有关怎么在ajax中使用post方式下载flask文件流,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。ajax post下载文件后端返回文件流,flask

本篇文章给大家分享的是有关怎么在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

from urllib.parse import quote@file.route('/download', methods=["POST"])def download_file():  filename='xx' #文件名  filepath='xx/xx' #文件路径  res = make_response(send_file(filepath))  #自定义的一个header,方便前端取到名字  res.headers['filename'] = quote(filename.encode('utf-8'))  return resjavascript——以async异步fetch为例:async function download() {  const res = await fetch(`http://xxx/file/download`, {  method: "POST",  body: JSON.stringify({}), //body里面是要发送的数据  headers: { "Content-Type": "application/json" },  responseType: 'blob' }) if (res.ok) {  const blData = await res.blob() //拿到blob数据  const urlObjData = window.URL.createObjectURL(new Blob([blData])) //创建url对象    //获取文件 进行下转码  const fileName = decodeURI(fileNameres.headers.get('filename'))    //创建a标签 点击a标签 达到下载目的  const link = document.createElement('a')  link.href = urlObjData  link.download = fileName //下载文件的名字  document.body.appendChild(link)  link.click()    document.body.removeChild(link)  window.URL.revokeObjectURL(urlObjData);    //展示图片  //xxx.src=urlObjData }}

ps:flask下载文件---文件流

html:

<a name="downloadbtn" class="btn btn-success pull-right" href="/downloadfile/?filename=/root/allfile/123.txt">下载</a>

py:

@app.route('/downloadfile/', methods=['GET', 'POST'])def downloadfile():  if request.method == 'GET':    fullfilename = request.args.get('filename')    # fullfilename = '/root/allfile/123.txt'    fullfilenamelist = fullfilename.split('/')    filename = fullfilenamelist[-1]    filepath = fullfilename.replace('/%s'%filename, '')    #普通下载    # response = make_response(send_from_directory(filepath, filename, as_attachment=True))    # response.headers["Content-Disposition"] = "attachment; filename={}".fORMat(filepath.encode().decode('latin-1'))    #return send_from_directory(filepath, filename, as_attachment=True)    #流式读取    def send_file():      store_path = fullfilename      with open(store_path, 'rb') as targetfile:        while 1:          data = targetfile.read(20 * 1024 * 1024)  # 每次读取20M          if not data:            break          yield data    response = Response(send_file(), content_type='application/octet-stream')    response.headers["Content-disposition"] = 'attachment; filename=%s' % filename  # 如果不加上这行代码,导致下图的问题    return response

没有文件名,和文件格式,遇到这种情况,打开F12,查看response.headers 与正常的比较

以上就是怎么在ajax中使用post方式下载flask文件流,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: 怎么在ajax中使用post方式下载flask文件流

本文链接: https://www.lsjlt.com/news/252240.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在ajax中使用post方式下载flask文件流
    本篇文章给大家分享的是有关怎么在ajax中使用post方式下载flask文件流,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。ajax post下载文件后端返回文件流,flask...
    99+
    2023-06-08
  • PHP 中使用流方式下载文件
    在 PHP 中,可以使用 fopen () 函数打开一个远程文件,并使用流来下载文件内容到本地文件。这样优点是不用将文件全部一次性放入内存中,可以避免内存溢出的问题。 下面是一个示例代码: $url = 'http://example.co...
    99+
    2023-08-31
    laravel php
  • PHP中怎么用流方式实现下载文件
    这篇文章主要讲解了“PHP中怎么用流方式实现下载文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中怎么用流方式实现下载文件”吧!PHP 中使用流方式下载文件在 PHP 中,可以使用 ...
    99+
    2023-07-05
  • js中怎么用文件流下载csv文件
    这篇文章主要讲解了“js中怎么用文件流下载csv文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“js中怎么用文件流下载csv文件”吧!js使用文件流下载csv文件的实现方法理解 Blob ...
    99+
    2023-07-05
  • 怎么在java中使用FTP下载文件
    怎么在java中使用FTP下载文件?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面...
    99+
    2023-06-14
  • 怎么在ajax中利用formdata流上传文件
    今天就跟大家聊聊有关怎么在ajax中利用formdata流上传文件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。//html如下//form1<form class=...
    99+
    2023-06-08
  • 怎么在java中使用Servlet程序下载文件
    这篇文章给大家介绍怎么在java中使用Servlet程序下载文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,...
    99+
    2023-06-14
  • python中怎么使用requests下载文件
    这篇文章主要介绍了python中怎么使用requests下载文件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python中怎么使用requests下载文件文章都会有所收获,下面我们一起来看看吧。使用reque...
    99+
    2023-06-29
  • Linux中怎么使用Aria2下载文件
    Linux中怎么使用Aria2下载文件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Aria2是一个免费的开源轻量级多协议命令行实用程序,可以从Internet上下载文件。...
    99+
    2023-06-28
  • 怎么在html中使用ajax上传大文件
    这篇文章给大家介绍怎么在html中使用ajax上传大文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。html有什么特点1、简易性:超级文本标记语言版本升级采用超集方式,从而更加灵活方便,适合初学前端开发者使用。2、可...
    99+
    2023-06-08
  • Linux中怎么使用wget命令下载文件
    本篇文章给大家分享的是有关Linux中怎么使用wget命令下载文件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  实例1 :下载单个文件  # wget http://mir...
    99+
    2023-06-13
  • 怎么在Python中利用流式读取大文件
    怎么在Python中利用流式读取大文件?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎...
    99+
    2023-06-14
  • 从 leetcode 下载文件并在 Python 中使用它的方法是什么?
    LeetCode 是一个非常流行的在线编程网站,可以帮助人们提升编程技能和算法能力。在 LeetCode 上,您可以找到各种各样的编程题目,并通过在线提交代码的方式来检验您的答案。但是,在某些情况下,您可能需要下载 LeetCode 的一...
    99+
    2023-07-23
    编程算法 leetcode 文件
  • 怎么在vue中使用django实现一个文件下载功能
    这篇文章将为大家详细讲解有关怎么在vue中使用django实现一个文件下载功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、概述在项目中,点击下载按钮,就可以下载文件。传统的下载链接一般...
    99+
    2023-06-14
  • 怎么在Java中使用IO流读写文件
    本篇文章为大家展示了怎么在Java中使用IO流读写文件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.读文件public class ReadFromFile { public static...
    99+
    2023-05-31
    java io流 ava
  • 怎么在Linux系统中使用SFTP方式传输文件
    本篇文章给大家分享的是有关怎么在Linux系统中使用SFTP方式传输文件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 在xftp里新建一个连接,注意协议需要选择SFTP,然后...
    99+
    2023-06-13
  • Linux中怎么使用sFTP进行上传和下载文件
    这篇文章主要讲解了“Linux中怎么使用sFTP进行上传和下载文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux中怎么使用sFTP进行上传和下载文件”吧!sftp是一种安全的文件传...
    99+
    2023-06-27
  • 怎么在python中使用CSV文件格式
    今天就跟大家聊聊有关怎么在python中使用CSV文件格式,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,...
    99+
    2023-06-14
  • 怎么在HTML5中Blob利用实现一个文件下载功能
    怎么在HTML5中Blob利用实现一个文件下载功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。$("#exportAll").on(&qu...
    99+
    2023-06-09
  • 怎么在Android中利用DownloadManager实现一个文件下载功能
    本篇文章为大家展示了怎么在Android中利用DownloadManager实现一个文件下载功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Android中DownloadManager实现文件下...
    99+
    2023-05-31
    android downloadmanager age
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作