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 res
javascript——以async異步fetch為例:

Ajax實現登錄案例_周口網賺兼職

這篇文章主要為大家詳細介紹了Ajax實現登錄案例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小夥伴們可以參考一下

哈尔滨网赚_履历分享|一场流动从策划到执行的方式和步骤_数据采集

做活动运营,请记住 “ 节奏感 ” 这个词,要有条不紊、有节奏来做这件事情。 做了运营这几年,陆陆续续总会接触到各种不同类型的活动,自己也有操盘过大大小小的活动。 对于自身而言,活动策划是运营从事者的标配,是考量运营功底一个重要的因素。 做一场活动,对你的策划

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文件流以及中文文件名的文章就先容到這了,更多相關ajax post下載flask文件流內容請搜索劇本之家以前的文章或繼續瀏覽下面的相關文章希望人人以後多多支持劇本之家!

泉源:劇本之家

鏈接:https://www.jb51.net/article/184005.htm

申請創業報道,分享創業好點子。,配合探討創業新機遇!

ajax異步實現文件分片上傳實例代碼_揭陽網賺

這篇文章主要給大家介紹了關於ajax異步實現文件分片上傳的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨着小編來一起學習學習吧

Author: 狗蛋
狗蛋的个人中心,这里没有什么。