原生js实现在线批量打包压缩下载多个word文档

先引入这三个js

<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script src="js/axios.min.js"></script>
//github下载地址:https://github.com/Stuk/jszip    npm install jszip
<script src="js/jszip.js"></script>
//FileSaver.min.js:https://download.csdn.net/download/weixin_45791806/87272893
<script src="js/FileSaver.min.js"></script>

测试的HTML

    <li>
         <div class="num">1</div>
         <div class="title">
             20以内的退位减法口算练习题
         </div>
         <div class="ul-checked ul-unchecked" data-id="657636"></div>
     </li>
     <li>
          <div class="num">1</div>
          <div class="title">
              20以内的退位减法口算练习题
          </div>
          <div class="ul-checked ul-unchecked" data-id="657637"></div>
      </li>
      <li>
          <div class="num">1</div>
          <div class="title">
              20以内的退位减法口算练习题
          </div>
          <div class="ul-checked ul-unchecked" data-id="657638"></div>
      </li>
      <li>
          <div class="num">1</div>
          <div class="title">
              20以内的退位减法口算练习题
          </div>
          <div class="ul-checked ul-unchecked" data-id="657639"></div>
      </li>
      <li>
          <div class="num">1</div>
          <div class="title">
              20以内的退位减法口算练习题
          </div>
          <div class="ul-checked ul-unchecked" data-id="657640"></div>
      </li>

点击批量下载

var app = {
        init() {
            app.Event();
        },
        Event() {
            // 批量下载 btn-batch-down批量下载的按钮
            $('.btn-batch-down').click(function () {
                var DownBox = new Array();
                // 文件下载链接
                var DownUrl = 'https://xxxxxxxxxxxx';
                $('.ul-checked').each(function (i, k) {
                    // 循环获取文件id
                    var id = $(k).attr('data-id');
                    // 拼接成完成的下载链接
                    var DownLink = DownUrl + id + '/';
                    // 创建对象  注意:fileName这个文件名不能重复,可以加个索引
                    var obj = {
                        path:DownLink,
                        fileName:''+id+'.docx'//文件名称
                    }
                    DownBox.push(obj);
                });
                app.handleDownload(DownBox)
            });
        },
        /**
         * 下载按钮点击事件
         */
        handleDownload(data) {
            const zip = new JSZip();
            const promises = [];
            data.forEach(item => {
                const promise = this.getFile(item.path).then(data => {
                	//文件名称,data 是内容
                    const file_name = item.fileName;
                    zip.file(file_name,data, { binary: true });
                });
                promises.push(promise)
            })
            Promise.all(promises).then(() => {
                zip.generateAsync({ type: 'blob' }).then(content => {
                    // 利用file-saver保存文件  自定义文件名
                    saveAs(content, '文件下载.zip') 
                })
            })
        },
        /**
         * 获取文件
         * @param url 文件路径
         * @returns {Promise<unknown>}
         */
        getFile(url) {
            return new Promise((resolve, reject) => {
                axios({
                    method: 'get',
                    url,
                    responseType: 'blob'
                })
                .then(data => {
                    console.log('data', data)
                    resolve(data.data)
                })
                .catch(error => {
                    reject(error.toString())
                })
            })
        }

    }
    app.init();

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枫叶&情缘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值