国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

前端調(diào)接口下載(導(dǎo)出)后端返回.zip壓縮文件流(的坑?。?/h1>

這篇具有很好參考價(jià)值的文章主要介紹了前端調(diào)接口下載(導(dǎo)出)后端返回.zip壓縮文件流(的坑?。OM麑?duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言:基于vue2+element-ui的一個(gè)后臺(tái)管理系統(tǒng),需求評(píng)審要加一個(gè)導(dǎo)入導(dǎo)出文件的功能,由于可能導(dǎo)出的數(shù)據(jù)量過大(幾十萬(wàn)條數(shù)據(jù)),下載時(shí)間過長(zhǎng),所以用.zip壓縮文件替代excel文件

本人以前也做過導(dǎo)出文件的功能,但是用的方法是后端處理數(shù)據(jù)然后放到另一個(gè)服務(wù)器上,前端要做的就是window.open 打開這個(gè)默認(rèn)地址加返回的地址拼接成的鏈接就可以自動(dòng)下載了

但是現(xiàn)在新入職的這家公司后端老哥明確告訴我:不行!沒辦法了,百度csdn chatgpt搜吧。。。。

經(jīng)過一堆無(wú)用答案和無(wú)數(shù)的坑后終于有了解決辦法,參考https://blog.csdn.net/Amy126/article/details/113882421? 老哥和其他各種老哥的方法

總結(jié):1.在接口處設(shè)置responseType和headers:

export function searchPersonnelHousInfoExport(query) {
    return request({
      baseUrl: '/api-login',
      url: '/miniadmin/personnelHous/searchPersonnelHousInfoExport',
      method: 'GET',
      params: query,
      responseType: 'blob', //注意
      headers: {            //注意
        'Content-Type': 'application/json; application/octet-stream'
      }
    })
  }

2.調(diào)用接口(注意設(shè)置文件格式)

async exportex(){
      let postData = {
        current: this.currentPage,
        size: this.pageSize
      }
      let res = await searchPersonnelHousInfoExport(postData)
      let blob = new Blob([res.data], { type: 'application/zip' }); //設(shè)置下載的內(nèi)容以及格式
      const url = window.URL.createObjectURL(blob); //設(shè)置路徑
      const link = window.document.createElement('a'); // 創(chuàng)建a標(biāo)簽
      link.href = url;
      let filename = res.headers['content-disposition']
        .split(';')[1]
        .split('filename=')[1]
      let decodedURL = decodeURIComponent(filename); //解碼,返回的是文件流所以我從res.header里面拿的文件名,但是是編碼后的%E4巴拉巴拉的,所以拿來(lái)用的話要在前端解碼
      link.download = decodedURL; //設(shè)置文件名
      link.style.display = 'none';
      link.click();
      console.log(link,'res')

      URL.revokeObjectURL(url);
}

3.如果下載下來(lái)是一堆亂碼或解析不了文件,去看看是否在main.js引入了mockjs,非必要就不引入,如果確實(shí)需要就這樣:

前端下載zip文件流,vue.js,前端,javascript

?

?

————————————————————分割線————————————————————

摸索過程(出現(xiàn)各種問題的原因,時(shí)間著急的同學(xué)可以跳過):新入職的這個(gè)公司沒弄過這個(gè)東西,所以就得自己下載處理接口返回的文件流,也就是那“一堆亂碼”,當(dāng)時(shí)打印res發(fā)現(xiàn)res.header里有一個(gè)地址,打開發(fā)現(xiàn)能直接下載這個(gè)壓縮文件,心里暗暗竊喜,這不是省事了嗎,結(jié)果清空篩選條件發(fā)現(xiàn)是后端放開了對(duì)token的校驗(yàn),一旦恢復(fù)校驗(yàn)接口馬上就報(bào)錯(cuò)了,而實(shí)際線上環(huán)境這樣做顯然是不安全的,不可能讓后端放開校驗(yàn),而出現(xiàn)這種情況的原因是在原頁(yè)面發(fā)了一次請(qǐng)求,打開新頁(yè)面又發(fā)了一次請(qǐng)求,原頁(yè)面在請(qǐng)求頭中設(shè)置了token,新開的頁(yè)面哪有這個(gè)東西,著急壞了,想著能不能把token跟著參數(shù)一起傳過去,后端校驗(yàn)找不到請(qǐng)求頭中的token去判斷參數(shù)里有沒有token,后端的回答是:所有請(qǐng)求都要先校驗(yàn)有無(wú)token?。?!前端下載zip文件流,vue.js,前端,javascript

?

這就很麻煩了,老老實(shí)實(shí)處理流吧QAQ

各種查各種找,經(jīng)過很多無(wú)用嘗試(當(dāng)磨煉心態(tài)了)結(jié)果得出的結(jié)論:

步驟1:

接口代碼(注意設(shè)置responseType和headers):

export function searchPersonnelHousInfoExport(query) {
    return request({
      baseUrl: '/api-login',
      url: '/miniadmin/personnelHous/searchPersonnelHousInfoExport',
      method: 'GET',
      params: query,
      responseType: 'blob', //注意
      headers: {            //注意
        'Content-Type': 'application/json; application/octet-stream'
      }
    })
  }

步驟2:

調(diào)用接口:

async exportex(){
      let postData = {
        current: this.currentPage,
        size: this.pageSize
      }
      let res = await searchPersonnelHousInfoExport(postData)
      let blob = new Blob([res.data], { type: 'application/zip' }); //設(shè)置下載的內(nèi)容以及格式
      const url = window.URL.createObjectURL(blob); //設(shè)置路徑
      const link = window.document.createElement('a'); // 創(chuàng)建a標(biāo)簽
      link.href = url;
      let filename = res.headers['content-disposition']
        .split(';')[1]
        .split('filename=')[1]
      let decodedURL = decodeURIComponent(filename); //解碼,返回的是文件流所以我從res.header里面拿的文件名,但是是編碼后的%E4巴拉巴拉的,所以拿來(lái)用的話要在前端解碼
      link.download = decodedURL; //設(shè)置文件名
      link.style.display = 'none';
      link.click();
      console.log(link,'res')

      URL.revokeObjectURL(url);
}

結(jié)果:真的下載到了.zip壓縮文件了!興高采烈的打開,結(jié)果傻眼了:能拿到壓縮文件,解壓后卻不是excel文件,當(dāng)時(shí)我的心,拔涼拔涼的啊,但是這邊排期還有不到兩天了,沒辦法,搜解決辦法吧

。。。。。漫長(zhǎng)的一天多。。。。。。

終于在搜的頭暈眼花口吐白沫甚至想到iframe嵌套往里塞地址和請(qǐng)求頭之后找到了一個(gè)不一樣的結(jié)論:mock模塊會(huì)影響原生的ajax請(qǐng)求,使得服務(wù)器返回的blob類型變成亂碼

瞬間虎軀一震,來(lái)到main.js一看:

// 全局 Mock 接口
import './mock'

趕緊試試,立馬把引入注釋了:

前端下載zip文件流,vue.js,前端,javascript

我滴媽啊,終于解決了,當(dāng)時(shí)熱淚盈眶,因?yàn)檫@個(gè)亂碼問題困擾我一天半了,mock火速滾出我的電腦!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-772183.html

到了這里,關(guān)于前端調(diào)接口下載(導(dǎo)出)后端返回.zip壓縮文件流(的坑?。┑奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 前端下載文化部幾種方法(excel,zip,html,markdown、圖片等等)和導(dǎo)出 zip 壓縮包

    前端下載文化部幾種方法(excel,zip,html,markdown、圖片等等)和導(dǎo)出 zip 壓縮包

    使用 后端的設(shè)置 Content-Type: application/octet-stream(下載用的流) 使用導(dǎo)出 zip 如果這篇【文章】有幫助到你??,希望可以給我點(diǎn)個(gè)贊??,創(chuàng)作不易,如果有對(duì)前端或者對(duì)python感興趣的朋友,請(qǐng)多多關(guān)注??????,咱們一起探討和努力?。?! ????? 個(gè)人主頁(yè) : 前端初見

    2024年02月14日
    瀏覽(60)
  • 純前端 導(dǎo)出Excel文件(包括導(dǎo)出用數(shù)組數(shù)據(jù)模擬文件數(shù)據(jù)和實(shí)際后端返回的文件數(shù)據(jù))的 方法

    ????????在純前端導(dǎo)出文件的一種常見方法是通過生成下載鏈接來(lái)實(shí)現(xiàn),可以使用Blob對(duì)象和URL.createObjectURL()方法來(lái)實(shí)現(xiàn),因?yàn)楝F(xiàn)在工作中主要運(yùn)用的前端框架是Angular,這篇文章將以angular為例進(jìn)行闡述。 一、示例代碼 1. 首先,安裝FileSaver庫(kù)(https://github.com/eligrey/FileSaver.j

    2024年04月23日
    瀏覽(26)
  • js將后端返回的文件流導(dǎo)出為excel,并自定義下載文件名

    js將后端返回的文件流導(dǎo)出為excel,并自定義下載文件名

    一. 需求 后臺(tái)管理系統(tǒng),常會(huì)出現(xiàn)導(dǎo)出excel表格功能;點(diǎn)擊導(dǎo)出按鈕,請(qǐng)求后端接口,需要將接口返回的 文件流 導(dǎo)出為excel,實(shí)現(xiàn)前端下載excel文件。 但是,返回的數(shù)據(jù)獲取 response 時(shí)出現(xiàn)亂碼,如圖: 二. 實(shí)現(xiàn)思路 調(diào)用后端下載接口,獲取傳遞過來(lái)的二進(jìn)制數(shù)據(jù)流 創(chuàng)建 a 標(biāo)

    2024年02月05日
    瀏覽(171)
  • 后端返回base64文件前端如何下載

    后端返回base64文件前端如何下載

    1.后端返回base64格式文件 2.前端代碼 3.請(qǐng)求封裝

    2024年02月05日
    瀏覽(26)
  • 前端處理后端返回的文件流,進(jìn)行文件下載

    前端處理后端返回的文件流,進(jìn)行文件下載

    二進(jìn)制流格式 ?Blob格式 前言: ? ? ? ? 需求:根據(jù)后端接口返回的文件流進(jìn)行數(shù)據(jù)處理,并實(shí)現(xiàn)文件的下載,且下載文件為word文檔. 封裝下載文件接口: 最開始沒帶 responseType:\\\"Blob\\\" ,進(jìn)行文件下載后,里面的內(nèi)容全部是亂碼?。?! 代碼實(shí)現(xiàn): ?知識(shí)點(diǎn)補(bǔ)充: ? ? ? ? 1、n

    2024年02月07日
    瀏覽(93)
  • 前端基于axios請(qǐng)求下載文件(后端返回Blob文件流)

    前端基于axios請(qǐng)求下載文件(后端返回Blob文件流)

    前端小白第一篇csdn文章就當(dāng)自己記錄學(xué)習(xí)啦! 我自己遇到的情況寫在前面防止有人和我不一樣,浪費(fèi)時(shí)間瀏覽; 調(diào)用下載接口后端給我返回的數(shù)據(jù)格式(即文件流格式)如下: 1.按鈕定義點(diǎn)擊事件 2.調(diào)用后端接口 在使用 axios 請(qǐng)求下載文件 api 接口時(shí),注意區(qū)分不同請(qǐng)求方法

    2024年02月11日
    瀏覽(97)
  • Java后端向前端返回文件流——實(shí)現(xiàn)下載功能

    Java后端向前端返回文件流——實(shí)現(xiàn)下載功能

    前端實(shí)現(xiàn)文件下載功能有多種方法,這里就不一一介紹,這里只介紹使用文件流下載的實(shí)現(xiàn)方法。 既然是文件流那就肯定需要給前端返回一堆二進(jìn)制編碼,作為后端就可以返回一個(gè) OutPutStream 后端可以使用Java中servlet提供的 HttpServletResponse ,核心步驟是要設(shè)置響應(yīng)的數(shù)據(jù)類型

    2024年02月11日
    瀏覽(25)
  • Java后端向前端返回文件流——實(shí)現(xiàn)下載功能!

    Java后端向前端返回文件流——實(shí)現(xiàn)下載功能!

    前端實(shí)現(xiàn)文件下載功能有多種方法,這里就不一一介紹,這里只介紹使用文件流下載的實(shí)現(xiàn)方法。 既然是文件流那就肯定需要給前端返回一堆二進(jìn)制編碼,作為后端就可以返回一個(gè) OutPutStream 后端可以使用Java中servlet提供的 HttpServletResponse ,核心步驟是要設(shè)置響應(yīng)的數(shù)據(jù)類型

    2024年02月08日
    瀏覽(28)
  • 后端接口返回文件流格式、前端如何實(shí)現(xiàn)文件下載導(dǎo)出呢?

    后端接口返回文件流格式、前端如何實(shí)現(xiàn)文件下載導(dǎo)出呢?

    在項(xiàng)目開發(fā)過程中,難免會(huì)需要實(shí)現(xiàn)文件下載功能,記錄下自己實(shí)際開發(fā)過程過程中遇到兩種實(shí)現(xiàn)的方式。一種:后端直接返回加密url ,前端解密后直接使用 a標(biāo)簽下載就可以,這種方法相等比較簡(jiǎn)單,另一種:后端接口直接返回文件流,這種方式前端就需要單獨(dú)封裝對(duì)應(yīng)的

    2024年02月16日
    瀏覽(30)
  • 【前端】根據(jù)后端返回的url進(jìn)行下載并設(shè)置文件下載名稱

    ????????在我們項(xiàng)目當(dāng)中存儲(chǔ)文件是存儲(chǔ)到廠商的服務(wù)器上的,然后廠商返回一個(gè)可以直接下載url地址,但是前端使用這個(gè)url下載的時(shí)候永遠(yuǎn)都是保存一個(gè)名字,這時(shí)候我們就需要設(shè)置文件保存的名稱, ????????那么如何實(shí)現(xiàn)呢?使用了fetch將url轉(zhuǎn)換成了blob即可。 代碼

    2024年02月04日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包