跨域图片下载JFIF格式解决方案及前端zip包下载

12,905次阅读
没有评论

共计 1249 个字符,预计需要花费 4 分钟才能阅读完成。

前言

之前文章有写过图片下载,同域名图片,只要添加 download 就可以下载下来,但是 download 在跨域图片中不起作用,因此,可以用 canvas 方式或者 xhr 方式下载。但是呢,通过 canvas 或者 xhr 下载下来的图片,在 win10 上面,可能会变成怪异的 JFIF,这个如何解决呢?

解决方案

推荐使用 file-saver 这个库

npm install file-saver –save

import {saveAs} from 'file-saver'

 saveAs("https://www.haorooms.com/upload/image.jpg", "haorooms.jpg");

这样就可以了,超级简单。

通过 zip 包下载多个 img 图片

首先,我们需要 jszip 这个库

下载多个在线 img 图片地址并打包成 zip 的方法如下:

  let zip = new JSZip()
  var myFile = zip.folder()
  let promiseAllData =[]
  res.data.forEach(imglist=>{// res.data 是图片对象数组 [{id,width,height,preview_url:'https://www.haorooms.com/1.jpg'}] 这样的格式
    (function(n) {promiseAllData.push(loadAsArrayBuffer(n.preview_url).then(buffer=>{myFile.file(`${n.id}-${n.width}*${n.height}.${checkAllimageType=='JPG'?'jpg':'png'}`,buffer)//checkAllimageType 是 JPG/PNG
        })) 

  })(imglist)
  })
  Promise.all(promiseAllData).then(result=>{zip.generateAsync({type:'blob'}).then((content)=> {saveAs(content, ` 批量制图 -${new Date().getTime()}.zip`)
     })
  })

//loadAsArrayBuffer 这个方法是图片下载的 promise 封装方法

export function loadAsArrayBuffer(url) {return new Promise((resolve,reject)=>{var xhr = new XMLHttpRequest();
    xhr.open("GET", url);
    xhr.responseType = "arraybuffer";
    xhr.onerror = function() {/* handle errors*/};
    xhr.onload = function() {if (xhr.status === 200) {resolve(xhr.response)}
      else {reject({})
      }
    }
    xhr.send();})
}

小结

上面就是跨域图片下载 JFIF 格式解决方案及前端 zip 包下载,相关代码。

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于1970-01-01发表,共计1249字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)