前端单张图片下载,批量下载图片成压缩包

Posted 是小橙鸭丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端单张图片下载,批量下载图片成压缩包相关的知识,希望对你有一定的参考价值。

各位铁子们,博主最近手撕了一个图片管理模块,效果如下图所示,其中有个下载图片的功能,包含了单张图片下载,以及多张图片批量下载成压缩包,认为很有意思,分享给你们

首先我们需要引入对应的安装包如下

  import axios from 'axios'
  import FileSaver from 'file-saver'
  import JSZip from 'jszip'

 下载功能主要代码如下

//批量图片下载
//this.currentChooseImgList参数是当前选中图片的数组,包含了pictureUrl,pictureName 等
//我们根据选中图片的数组长度为1进行单张图片下载,大于1进行批量操作,数量为0则提示勾选
      download() 
        if (this.currentChooseImgList.length === 0) 
          this.$message.warning('请先右键勾选下载数据!')
          return
        
        //多张图片下载成压缩包
        if (this.currentChooseImgList.length > 1) 
          this.exportLoading = true
          const zip = new JSZip()
          const _this = this
          const promises = []
          const cache = 
          console.log('111')
          for (const item of this.currentChooseImgList) 
            const promise = _this.getFile(item.pictureUrl).then((data) => 
              // 下载文件, 并存成ArrayBuffer对象
              // const file_name = item.realName // 获取文件名
              zip.file(item.pictureName + '.png', data,  binary: true ) // 逐个添加文件,需要加后缀".png"
              cache[item.pictureName] = data
            )
            promises.push(promise)
          
          Promise.all(promises)
            .then(() => 
              zip.generateAsync( type: 'blob' ).then((content) => 
                // 生成二进制流
                FileSaver.saveAs(content, '图片') // 利用file-saver保存文件  自定义文件名
                _this.$message.success('图片下载完成')
              )
              _this.exportLoading = false
            )
            .catch((res) => 
              _this.$message.warning('文件下载失败!')
              _this.exportLoading = false
            )
         else 
          //单张图片下载
          this.downloadIamge(
            this.rightList[this.currentIndex].pictureUrl,
            this.rightList[this.currentIndex].pictureName
          )
        
      ,
      //批量
      getFile(url) 
        return new Promise((resolve, reject) => 
          axios(
            method: 'get',
            url,
            responseType: 'blob',
          )
            .then((response) => 
              resolve(response.data)
            )
            .catch((error) => 
              reject(error.toString())
            )
        )
      ,

      //单张图片下载
      downloadIamge(imgsrc, name) 
        //下载图片地址和图片名
        var image = new Image()
        // 解决跨域 Canvas 污染问题
        image.setAttribute('crossOrigin', 'anonymous')
        image.onload = function () 
          var canvas = document.createElement('canvas')
          canvas.width = image.width
          canvas.height = image.height
          var context = canvas.getContext('2d')
          context.drawImage(image, 0, 0, image.width, image.height)
          var url = canvas.toDataURL('image/png') //得到图片的base64编码数据

          var a = document.createElement('a') // 生成一个a元素
          var event = new MouseEvent('click') // 创建一个单击事件
          a.download = name || 'photo' // 设置图片名称
          a.href = url // 将生成的URL设置为a.href属性
          a.dispatchEvent(event) // 触发a的单击事件
        
        image.src = imgsrc
      ,

效果如图所示

 

 

 

认为对铁子们有帮助的,请关注三联,谢谢啦

以上是关于前端单张图片下载,批量下载图片成压缩包的主要内容,如果未能解决你的问题,请参考以下文章

前端单张图片下载,批量下载图片成压缩包

前端js实现根据文件url批量压缩下载成zip包

怎么批量压缩png图片保持图片质量?

前端json数据 转换成zip压缩包下载

java文档打包成压缩包并且下载

java批量下载,将多文件打包成zip格式下载