下载图片和批量下载图片vue
- 下载单个图片
this.downloadImg(url, "pic");
downloadImg(imgsrc, name) {
var image = new Image();
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();
var a = document.createElement("a");
var event = new MouseEvent("click");
a.download = name || "photo";
a.href = url;
a.dispatchEvent(event);
};
image.src = imgsrc;
},
- 批量下载图片
npm i file-saver
npm i jszip
import JSZip from "jszip";
import FileSaver from "file-saver";
BatchDownload() {
var tempList = [];
var isWarning = false;
for (let i = 0; i < this.imgDataUrl.length; i++) {
if (!this.imgDataUrl[i].qrCodeImg) {
isWarning = true;
} else {
tempList.push(this.imgDataUrl[i]);
}
}
if (isWarning) {
this.$message({
type: "warning",
message: "当前存在没有图片地址,请重新生成",
});
}
let _this = this;
let zip = new JSZip();
let cache = {};
let promises = [];
_this.title = "正在加载压缩文件";
for (let item of tempList) {
const promise = _this.getImgArrayBuffer(item.qrCodeImg).then((data) => {
zip.file(item.number + ".png", data, { binary: true });
cache[item.number] = data;
});
promises.push(promise);
}
Promise.all(promises)
.then(() => {
zip.generateAsync({ type: "blob" }).then((content) => {
_this.title = "正在压缩";
FileSaver.saveAs(content, "图片");
_this.title = "压缩完成";
});
})
.catch(() => {
_this.$message.error("文件压缩失败");
});
},