把compressorjs用Promise封装成公共方法。
1.方法封装
import Compressor from 'compressorjs';
/**
* @param image 图片
* @param backType 需要返回的类型blob,file
* @param quality 图片压缩比 0-1,数字越小,图片压缩越小
* @returns
*/
static compressorImage(image: File, backType?:string, quality?: number) {
return new Promise((resolve, reject) => {
new Compressor(image, {
quality: quality || 0.8,
success(result) {
let file = new File([result], image.name, { type: image.type })
if (!backType || backType == 'blob') {
resolve(result)
} else if (backType == 'file') {
resolve(file)
} else {
resolve(file)
}
},
error(err){
console.log('图片压缩失败---->>>>>',err)
reject(err)
}
})
})
}
2.使用,直接调用就完事了
这里的for循环不能用map,forEach,filter等需要回调的循环替代,否则下面语句执行时FormData里没有值。
async function uploadFiles(params){ //params是一个文件数组
const imgFormData = new FormData();
for(let i = 0; i < params.length; i++) {
let newImg = await compressorImage(params[i], 'file', 0.6) as File;
imgFormData.append('file', newImg)
}
}