有些項目,如果服務(wù)器圖片資源不能互相訪問時,需要下載后并上傳到另一個服務(wù)器,網(wǎng)上很多都是轉(zhuǎn) base64 字符串后上傳到服務(wù)器,下面我們試一下下載為 blob 大文件并轉(zhuǎn)為 file 對象進行上傳。
// url 文件地址轉(zhuǎn)為文件對象
function urlToFile(url, fileName) {
return new Promise((resolve, reject) => {
fetch(url).then(res => res.blob()).then(blob => {
let file = new window.File([blob], fileName);
resolve(file);
}).catch(error => {
console.log("error", error);
reject(error)
});
});
}
// 獲取文件對象數(shù)組
function getFileList(urls) {
return new Promise(async (resolve) => {
let fileList = [];
for (let i = 0; i < urls.length; i++) {
let fileName = urls[i].substring(urls[i].lastIndexOf('/') + 1);
let file = await this.urlToFile(urls[i], fileName);
if(file instanceof window.File){
fileList.push(file);
}
}
resolve(fileList);
});
}
// 上傳文件對象
function uploadFile(urls){
return new Promise(async (resolve) => {
let fileList = await this.getFileList(urls);
let formData = new FormData();
for (let i = 0; i < fileList.length; i++) {
formData.append("files", fileList[i]);
}
fetch("http://localhost:8080/upload/img/list", {
method: "POST",
body: formData
}).then(result => result.json()).then(json => {
console.log("result", json);
resolve(json);
})
});
}