最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue如何使用文件流進(jìn)行下載(new Blob)

 更新時(shí)間:2022年09月22日 11:24:59   作者:有蟬  
這篇文章主要介紹了vue如何使用文件流進(jìn)行下載(new Blob),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

vue使用文件流進(jìn)行下載(new Blob)

封裝方法

function getExel(url, params, index) {+
? return new Promise(function(resolve, reject) {
? ? let data = {
? ? ? method: "GET",
? ? ? url:url,
? ? ? headers: {
? ? ? ? 'token': ?gettoken("token")
? ? ? },
? ? ? responseType: 'arraybuffer'
? ? }
? ? resolve(axios(data));
? })
}

注意:responseType應(yīng)設(shè)置為:'arraybuffer'

發(fā)送請(qǐng)求($Api已經(jīng)掛載在了vue對(duì)象上,所以可以這么使用)

this.$Api.getExel("/goodsCheckService/v1/planMaterial/export?idList="+idArray)
? ? ? ? ? .then(response => {
? ? ? ? ? ? ? let a = document.createElement('a');
?
? ? ? ? ? ? ? //ArrayBuffer 轉(zhuǎn)為 Blob
? ? ? ? ? ? ? let blob = new Blob([response.data], {type: "application/vnd.ms-excel"});?
? ? ? ? ? ? ??
? ? ? ? ? ? ? let objectUrl = URL.createObjectURL(blob);
? ? ? ? ? ? ? a.setAttribute("href",objectUrl);
? ? ? ? ? ? ? a.setAttribute("download", '計(jì)劃單電子表格.xls');
? ? ? ? ? ? ? a.click();
});

vue下載文件流完整前后端代碼

使用Vue時(shí),我們前端如何處理后端返回的文件流

首先后端返回流,這里我把流的動(dòng)作拿出來(lái)了,我很多地方要用

? ? /**
? ? ?* 下載單個(gè)文件
? ? ?*
? ? ?* @param docId
? ? ?*/
? ? @GetMapping("/download/{docId}")
? ? public void download(@PathVariable("docId") String docId,
? ? ? ? ? ? ? ? ? ? ? ? ?HttpServletResponse response) {
? ? ? ? outWrite(response, docId);
? ? }
? ??
?? ?/**
? ? ?* 輸出文件流
? ? ?* @param response
? ? ?* @param docId
? ? ?*/
? ? private void outWrite(HttpServletResponse response, String docId) {
? ? ? ? ServletOutputStream out = null;
? ? ? ? try {
? ? ? ? ? ? out = response.getOutputStream();
? ? ? ? ? ? // 禁止圖像緩存。
? ? ? ? ? ? response.setHeader("Pragma", "no-cache");
? ? ? ? ? ? response.setHeader("Cache-Control", "no-cache");
? ? ? ? ? ? response.setDateHeader("Expires", 0);
? ? ? ? ? ? byte[] bytes = docService.downloadFileSingle(docId);
? ? ? ? ? ? if (bytes != null) {
? ? ? ? ? ? ? ? MagicMatch match = Magic.getMagicMatch(bytes);
? ? ? ? ? ? ? ? String mimeType = match.getMimeType();
? ? ? ? ? ? ? ? response.setContentType(mimeType);
? ? ? ? ? ? ? ? response.addHeader("Content-Length", String.valueOf(bytes.length));
? ? ? ? ? ? ? ? out.write(bytes);
? ? ? ? ? ? }
? ? ? ? ? ? out.flush();
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? UnitedLogger.error(e);
? ? ? ? } finally {
? ? ? ? ? ? IOUtils.closeQuietly(out);
? ? ? ? }
? ? }

前端這里我引入了一個(gè)組件 js-file-download

npm install js-file-download --save

然后在Vue文件中添加進(jìn)來(lái)

import fileDownload from "js-file-download";
? ?// 文檔操作列對(duì)應(yīng)事件
? ? async handleCommand(item, data) {
? ? ? switch (item.key) {
? ? ? ? case "download":
? ? ? ? ? var res = await this.download(data);
? ? ? ? ? return fileDownload(res, data.name);
? ? ? ? ...
? ? ? ? default:
? ? ? }
? ? ? // 刷新當(dāng)前層級(jí)的列表
? ? ? const folder = this.getLastFolderPath();
? ? ? this.listClick(folder.folderId, folder.name);
? ? },
? ? // 下載
? ? async download(row) {
? ? ? if (this.isFolder(row.type)) {
? ? ? ? return FolderAPI.download(row.id);
? ? ? } else {
? ? ? ? return DocAPI.download(row.id);
? ? ? }
? ? },

docAPI js 注意需要設(shè)置responseType

/**
?* 下載單個(gè)文件
?* @param {*} id
?*/
const download = (id) => {
? return request({
? ? url: _DataAPI.download + id,
? ? method: "GET",
? ? responseType: 'blob'
? });
};

這樣即可成功下載 

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vscode 使用Prettier插件格式化配置使用代碼詳解

    vscode 使用Prettier插件格式化配置使用代碼詳解

    這篇文章主要介紹了vscode 使用Prettier插件格式化配置使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Vue項(xiàng)目打包后可修改基礎(chǔ)接口地址配置的具體操作

    Vue項(xiàng)目打包后可修改基礎(chǔ)接口地址配置的具體操作

    vue項(xiàng)目打包過(guò)后發(fā)現(xiàn)地址錯(cuò)了或者發(fā)布到別的服務(wù)器發(fā)現(xiàn)請(qǐng)求的地址不對(duì),每次都要去重新打包,太浪費(fèi)時(shí)間,下面這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目打包后可修改基礎(chǔ)接口地址配置的具體操作,需要的朋友可以參考下
    2022-08-08
  • vue遍歷中存在el-form之踩坑記錄

    vue遍歷中存在el-form之踩坑記錄

    這篇文章主要介紹了vue遍歷中存在el-form之踩坑記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue部署到線上為啥會(huì)出現(xiàn)404的原因分析及解決

    vue部署到線上為啥會(huì)出現(xiàn)404的原因分析及解決

    這篇文章主要介紹了vue部署到線上為啥會(huì)出現(xiàn)404的原因分析及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • go-gin-vue3-elementPlus帶參手動(dòng)上傳文件的案例代碼

    go-gin-vue3-elementPlus帶參手動(dòng)上傳文件的案例代碼

    這篇文章主要介紹了go-gin-vue3-elementPlus帶參手動(dòng)上傳文件的案例代碼,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • VUE JS 使用組件實(shí)現(xiàn)雙向綁定的示例代碼

    VUE JS 使用組件實(shí)現(xiàn)雙向綁定的示例代碼

    本篇文章主要介紹了VUE JS 使用組件實(shí)現(xiàn)雙向綁定,詳細(xì)的介紹了vue的雙向數(shù)據(jù)綁定原理以及核心代碼模塊,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-01-01
  • vue3如何用pinia替代vuex

    vue3如何用pinia替代vuex

    這篇文章主要介紹了vue3如何使用pinia替代vuex問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Element中el-tabs左右滑動(dòng)動(dòng)畫的實(shí)現(xiàn)

    Element中el-tabs左右滑動(dòng)動(dòng)畫的實(shí)現(xiàn)

    本篇博客將詳細(xì)介紹如何在使用 Vue 以及 Element UI 時(shí),實(shí)現(xiàn)一個(gè)具有左右滑動(dòng)效果的 tab 切換動(dòng)畫,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • 基于 vue-skeleton-webpack-plugin 的骨架屏實(shí)戰(zhàn)

    基于 vue-skeleton-webpack-plugin 的骨架屏實(shí)戰(zhàn)

    這篇文章主要介紹了基于 vue-skeleton-webpack-plugin 的骨架屏實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Vue項(xiàng)目全局配置頁(yè)面緩存之按需讀取緩存的實(shí)現(xiàn)詳解

    Vue項(xiàng)目全局配置頁(yè)面緩存之按需讀取緩存的實(shí)現(xiàn)詳解

    這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目全局配置頁(yè)面緩存之實(shí)現(xiàn)按需讀取緩存的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起看看吧
    2018-08-08

最新評(píng)論

嵩明县| 长宁县| 和静县| 安化县| 巴彦淖尔市| 抚宁县| 吉林市| 宁德市| 广元市| 南投市| 丰镇市| 沙雅县| 恭城| 当涂县| 柳州市| 牟定县| 杂多县| 阿克| 和平区| 沾益县| 密山市| 临汾市| 美姑县| 英德市| 虞城县| 九龙县| 韶山市| 富阳市| 武乡县| 岳阳市| 新和县| 怀远县| 大同县| 古浪县| 桑植县| 镇原县| 尚志市| 吉安市| 泸水县| 旬阳县| 临桂县|