批量下载文件【vue】

这篇博客展示了如何使用Vue.js、axios、JSZip和FileSaver库来实现批量下载图片并将其压缩为ZIP文件的功能。代码中,通过axios获取图片的ArrayBuffer数据,然后利用JSZip创建ZIP文件,并使用FileSaver保存文件。该方法适用于处理图片类型的文件下载。
摘要由CSDN通过智能技术生成
这里的最大下载量 测试出来的是1000每次 
<template>
  <div class="about">
    <h1>This is an about page</h1>
    <button @click="handleBatchDownload">111111</button>
  </div>
</template>
<script>
import axios from "axios";
import JSZip from "jszip";
import FileSaver from "file-saver";
export default {
  data() {
    return {
      list: [
        {
          name: "史圣达",
          studentNum: "200603001",
          ropeokFic:
            "http://172.19.1.14:9090/moreStudentHead/210319108003504160768.jpg",
          hikvisonFic: "",
        },
        {
          name: "刘晨",
          studentNum: "201001001",
          ropeokFic:
            "http://172.19.1.14:9090/moreStudentHead/21033176733634052096.jpg",
          hikvisonFic: "",
        },
      ],
    };
  },
  methods: {
    handleBatchDownload() {
   // 这里需要注意的是responseType, 如果下载文件是文本类型的(如: .txt, .js之类的), 那么用responseType: 'text'也可以, 但是如果下载的文件是图片, 视频之类的, 就得用arraybuffer
      const getFile = (url) => {
        console.log(url)
        return new Promise((resolve, reject) => {
          axios({
            method: "get",
            url,
            responseType: "arraybuffer",
          })
            .then((data) => {
              resolve(data.data);
            })
            .catch((error) => {
              reject(error.toString());
            });
        });
      };
      let piclist = [];
      let namelist = [];
      for (let i = 0; i < this.list.length; i++) {
        piclist.push(this.list[i].ropeokFic)
        namelist.push(`${this.list[i].name}_${this.list[i].studentNum}`);
      }
    
      const data = piclist; // 需要下载打包的路径, 可以是本地相对路径, 也可以是跨域的全路径
      const zip = new JSZip();
      const cache = {};
      const promises = [];
      console.log(data)
      data.forEach((item, index) => {
        console.log(item)
        const promise = getFile(item).then((data) => {
          // 下载文件, 并存成ArrayBuffer对象
         console.log(item)
          const file_name = `${namelist[index]}.jpg`;
          zip.file(file_name, data, { binary: true }); // 逐个添加文件
          cache[file_name] = data;
        });
        promises.push(promise);
        
      });
      console.log(promises)
      Promise.all(promises).then(() => {
        zip.generateAsync({ type: "blob" }).then((content) => {
          // 生成二进制流
          FileSaver.saveAs(content, "打包下载.zip"); // 利用file-saver保存文件
        });
      });
    },
  },
  mounted() {
    // console.log(list)
  },
};
</script>

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值