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

vue項(xiàng)目實(shí)現(xiàn)下載zip壓縮包

 更新時(shí)間:2024年03月08日 09:15:02   作者:阿wei程序媛  
這篇文章主要介紹了vue項(xiàng)目實(shí)現(xiàn)下載zip壓縮包方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

vue項(xiàng)目下載zip壓縮包

直接上代碼

1.請(qǐng)求后端接口

//必須加上responseType,因?yàn)橄螺d的zip屬于流和普通的下載方式還是有較大區(qū)別的,同時(shí)headers也需要設(shè)置一下,不然是下載不了。
export function loadLabel(query) {
  return request({
    url: '/express/admin/loadLabel',
    method: 'get',
    params: query,
    responseType: 'blob',
    headers:{ 'Content-Type': 'application/json; application/octet-stream'},
  })
}

2.HTML

<el-button
    size="mini"
    type="text"
    icon="el-icon-download"
    @click="handleIndent(scope.row)"
    v-hasPermi="['express:result:export']">
      下載失敗訂單
</el-button>

3.JS

  //下載面單封裝方法
    fileHandle(data, fileName) {
      let blob = new Blob([data], { type: 'application/zip' })
      let url = window.URL.createObjectURL(blob)
      const link = document.createElement('a') // 創(chuàng)建a標(biāo)簽
      link.href = url
      link.download = fileName // 重命名文件
      link.click()
      URL.revokeObjectURL(url) // 釋放內(nèi)存
    },
    /** 下載面單 */
    handleSheet(row){
      this.queryParams.parentId=row.id,
      this.queryParams.statusCode=200
      this.$confirm('是否確認(rèn)下載成功的面單嘛?', '提示', {
        confirmButtonText: '確定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        const loading1= this.$loading({
          lock: true,
          text: '正在下載,請(qǐng)稍等',
          spinner: 'el-icon-loading',
          background: 'rgba(0, 0, 0, 0.7)'
        });
        loadLabel(this.queryParams).then(res => {
          loading1.close();
          this.fileHandle(res,'面單.zip')
        })
      }).catch(() => {
      });
    },

當(dāng)然也可以不用封裝的方法

 handleSheet(row){
      this.queryParams.parentId=row.id,
      this.queryParams.statusCode=200
      const queryparmas=this.queryParams
      this.$confirm("是否確認(rèn)導(dǎo)出所有數(shù)據(jù)?", "警告", {
        confirmButtonText: "確定",
        cancelButtonText: "取消",
        type: "warning",
      }).then(function() {
        return loadLabel(queryparmas);
      }).then(response => {
        let blob = new Blob([response.data], {type: 'application/zip'})
        let url = window.URL.createObjectURL(blob)
        const link = document.createElement('a') // 創(chuàng)建a標(biāo)簽
        link.href = url
        link.download = '面單.zip' // 重命名文件
        link.click()
        URL.revokeObjectURL(url) // 釋放內(nèi)存
      }).catch(function(err) {
        console.log(err)
      });
    },

以上兩種形式的代碼就能實(shí)現(xiàn)zip下載

vue多文件下載zip格式

場(chǎng)景

多圖片時(shí),下載成一個(gè)zip壓縮包文件

代碼實(shí)現(xiàn)

 1、安裝 jszip 和 file-saver 插件

npm install jszip
npm install file-saver

2、引入并使用

import JSZip from "jszip";
import FileSaver from "file-saver";
 
/**
 * 下載全部附件
 * @param {*} fileList 下載列表
 * @param {*} zipName 壓縮包名稱
 */
export function downloadMoreFileBtn(fileList, zipName) {
  var zip = new JSZip();
  var promises = [];
  let cache = {};
  for (let item of fileList) {
    // item.feilePath為文件鏈接地址
    // item.fileName為文件名稱
    if(item.imageUrl) {
      const promise = getImgArrayBuffer(item.imageUrl).then((data) => {
        // 下載文件, 并存成ArrayBuffer對(duì)象(blob)
        zip.file(item.imageName, data, { binary: true }); // 逐個(gè)添加文件
        cache[item.imageName] = data;
      });
      promises.push(promise);
    } else {
    // feilePath地址不存在時(shí)提示
      alert(`附件${item.imageName}地址錯(cuò)誤,下載失敗`);
    }
  }
  Promise.all(promises).then(() => {
    zip.generateAsync({ type: "blob" }).then((content) => {
      // 生成二進(jìn)制流
      FileSaver.saveAs(content, zipName); // 利用file-saver保存文件  zipName:自定義文件名
    });
  }).catch((res) => {
    alert("文件壓縮失敗");
  });
}
 
/**
 * 文件以流的形式獲?。▍?shù)url為文件鏈接地址)
 * @param {*} url 
 * @returns 
 */
export function getImgArrayBuffer(url) {
  return new Promise((resolve, reject) => {
    //通過請(qǐng)求獲取文件blob格式
    let xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", url, true);
    xmlhttp.responseType = "blob";
    xmlhttp.onload = function () {
      if (xmlhttp.status == 200) {
        resolve(xmlhttp.response);
      } else {
        reject(xmlhttp.response);
      }
    };
    xmlhttp.send();
  });
}

3、案例

import { downloadMoreFileBtn } from "@/utils/tools";
 
export default {
  data() {
    return {
      basicImage: {
        name: '使用功能基準(zhǔn)圖',
        imageCount: 2,
        imageList: [
          {
            imageName: '使用功能基準(zhǔn)圖1.jpg',
            imageUrl: 'https://guoyan.haznet.cn/file/20230531100310f3u83t94wf.jpg',
          },
          {
            imageName: '使用功能基準(zhǔn)圖2.jpg',
            imageUrl: 'https://guoyan.haznet.cn/file/20230531100340aqer06tma5.jpg',
          }
        ]
      },
    }
  },
  methods: {
    /**
     * 下載圖片
     */
    downloadImg(val) {
      downloadMoreFileBtn(this.basicImage.imageList, this.basicImage.name)
    },
  },
}

總結(jié)

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

相關(guān)文章

  • vue使用vuedraggable對(duì)列表進(jìn)行拖拽排序

    vue使用vuedraggable對(duì)列表進(jìn)行拖拽排序

    vuedraggable 是一個(gè)基于 Vue 的拖拽排序組件,它可以讓你輕松地在 Vue 應(yīng)用中實(shí)現(xiàn)拖拽排序功能,下面就跟隨小編一起來了解下它的具體應(yīng)用吧
    2024-12-12
  • Vue.js源碼分析之自定義指令詳解

    Vue.js源碼分析之自定義指令詳解

    這篇文章主要給大家介紹了關(guān)于Vue.js源碼分析之自定義指令的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 老生常談vue2中watch的使用

    老生常談vue2中watch的使用

    watch的基本用法是在Vue實(shí)例中定義一個(gè)watch對(duì)象,該對(duì)象內(nèi)部包含需要監(jiān)聽的數(shù)據(jù)項(xiàng)和對(duì)應(yīng)的回調(diào)函數(shù),這篇文章主要介紹了vue2中watch的使用,需要的朋友可以參考下
    2024-01-01
  • Vue+elementUI實(shí)現(xiàn)多圖片上傳與回顯功能(含回顯后繼續(xù)上傳或刪除)

    Vue+elementUI實(shí)現(xiàn)多圖片上傳與回顯功能(含回顯后繼續(xù)上傳或刪除)

    這篇文章主要介紹了Vue+elementUI實(shí)現(xiàn)多圖片上傳與回顯功能(含回顯后繼續(xù)上傳或刪除),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • axios實(shí)現(xiàn)文件上傳并獲取進(jìn)度

    axios實(shí)現(xiàn)文件上傳并獲取進(jìn)度

    這篇文章主要為大家詳細(xì)介紹了axios實(shí)現(xiàn)文件上傳并獲取進(jìn)度,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 詳解Vue源碼學(xué)習(xí)之雙向綁定

    詳解Vue源碼學(xué)習(xí)之雙向綁定

    這篇文章主要介紹了Vue源碼學(xué)習(xí)之雙向綁定,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • vue項(xiàng)目實(shí)現(xiàn)多語言切換的思路

    vue項(xiàng)目實(shí)現(xiàn)多語言切換的思路

    這篇文章主要介紹了vue項(xiàng)目實(shí)現(xiàn)多語言切換的思路,幫助大家完成多語言翻譯,感興趣的朋友可以了解下
    2020-09-09
  • vxe-table、vxe-grid合并行配置項(xiàng)生成方式

    vxe-table、vxe-grid合并行配置項(xiàng)生成方式

    這篇文章主要介紹了vxe-table、vxe-grid合并行配置項(xiàng)生成方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • vue雙向數(shù)據(jù)綁定原理分析、vue2和vue3原理的不同點(diǎn)

    vue雙向數(shù)據(jù)綁定原理分析、vue2和vue3原理的不同點(diǎn)

    這篇文章主要介紹了vue雙向數(shù)據(jù)綁定原理分析、vue2和vue3原理的不同點(diǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • vue自定義table表如何實(shí)現(xiàn)內(nèi)容上下循環(huán)滾動(dòng)

    vue自定義table表如何實(shí)現(xiàn)內(nèi)容上下循環(huán)滾動(dòng)

    這篇文章主要介紹了vue自定義table表如何實(shí)現(xiàn)內(nèi)容上下循環(huán)滾動(dòng)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10

最新評(píng)論

兴文县| 绍兴县| 德保县| 临江市| 隆化县| 黎城县| 两当县| 旌德县| 庆城县| 平邑县| 乌鲁木齐市| 安达市| 桑日县| 曲沃县| 玉山县| 九龙坡区| 金乡县| 探索| 武冈市| 且末县| 龙口市| 陆丰市| 仪陇县| 攀枝花市| 深水埗区| 孙吴县| 瑞丽市| 邵东县| 寿宁县| 图们市| 武强县| 衢州市| 五大连池市| 盈江县| 荣昌县| 衡阳市| 自治县| 扶风县| 安多县| 遵化市| 沂源县|