安裝下載jszip、file-saver依賴
npm install jszip npm install file-saver npm install axios
在自己需要的頁面引入
import axios from "axios"; import JSZip from "jszip"; import FileSaver from "file-saver";
使用axios下載buffer流
const getFile = (url, callback) => {
return new Promise((resolve, reject) => {
axios({
method: "get", //使用get請求
url, //放入的文件地址
responseType: "arraybuffer" //請求的數據buffer對象
onDownloadProgress: function(progressEvent) { //這一步是下載文件進度條,可以和progress進度條一塊使用,不過多個文件下載會有很丑的動畫,建議同步下載顯示進度條
// 對原生進度事件的處理
if (callback) {
callback(progressEvent);
}
}
})
.then(data => {
resolve(data.data);
})
.catch(error => {
reject(error.toString());
});
});
};
調用上邊的函數
fileDownLoadHandler() {
// 需要下載打包的路徑, 可以是本地相對路徑, 也可以是跨域的全路徑
var that = this;
var files = that.getData;
const zip = new JSZip();
const cache = {};
const promises = [];
files.forEach(items => {
items.orderFiles.forEach(item => {
var orderName = items.orderName;
const promise = getFile(item.url, that.progressBar).then(data => {
// 下載文件, 並存成ArrayBuffer對象
const arr_name = item.url.split("/");
const file_name = arr_name[arr_name.length - 1]; // 獲取文件名
// zip.file(file_name, data, { binary: true }); // 逐個添加文件
zip.file(orderName + "/" + file_name, data);
cache[file_name] = data;
});
promises.push(promise);
});
});
Promise.all(promises).then(() => {
console.log("全部下載完成");
zip.generateAsync({ type: "blob" }).then(content => {
// 生成二進制流
console.log("生成壓縮包");
FileSaver.saveAs(content, "RobotInformation.zip"); // 利用file-saver保存文件 自定義文件名
});
});
},
如果想用進度條,可以在下邊設置
progressBar(progressEvent) {
// 獲取百分比(此處保留了一位小數)
let percentage = Number(
((progressEvent.loaded / progressEvent.total) * 100).toFixed(1)
);
console.log(percentage);
this.$nextTick(() => {
this.progressNum = percentage;
});
// 讓百分比顯示在界面上
}
<el-progress :percentage="progressNum"></el-progress>
