多说不宜 直接上代码
<u-upload
@on-choose-complete="afterRead"
:mutiple="false"
upload-text="上传照片"
:size-type="sizeType"
@on-remove="remove"
:preview-full-image="false"
:file-list="fileList"
imageMode="aspectFit"
:show-progress="false"
width="150rpx"
height="150rpx"
ref="uUpload"
:auto-upload="false"
max-count="9"
:name="'img'"
>
</u-upload>
async uploadFilePromise(url) {
console.log(url,'所有文件')
let uploadUrl = "";
await url.map((item) => {
uni.compressImage({
src: item.path,
quality: 30,
success: (res) => {
uploadUrl = res;
this.uploadFile(uploadUrl)
},
});
this.getImageInfo(item.path);
console.log(111);
});
console.log(this.uploadList,'上传后的文件')
},
async afterRead(event) {
console.log(event);
let lists = [];
await event.map((photo) => {
lists.push(photo.file);
});
console.log(lists,'文件目录')
let fileListLen = this[`fileList`].length;
const result = await this.uploadFilePromise(lists);
console.log(result);
},
uploadFile(file) {
console.log(file);
return new Promise((resolve, reject) => {
const uploadTask = uni.uploadFile({
url: this.action,
filePath: file.path || file.tempFilePath,
name: "img",
type: "image/jpeg",
success: (uploadFileRes) => {
console.log(uploadFileRes)
if (uploadFileRes.statusCode === 200) {
const data = JSON.parse(uploadFileRes.data);
this.uploadList.push(data);
this.urlImg = data.path;
uni.showToast({
title: data.msg,
icon: "none",
});
} else {
console.log(uploadFileRes);
uni.showToast({
title: "上传失败",
icon: "none",
});
}
},
fail(error) {
uni.$u.toast(error.errMsg);
console.log("图片上传失败", error);
},
});
});
},
convertBase64UrlToFile(base64) {
let urlData = base64.dataURL;
let type = base64.type;
let contentName = base64.contentName;
let bytes = null;
if (urlData.split(",").length > 1) {
bytes = window.atob(urlData.split(",")[1]);
} else {
bytes = window.atob(urlData);
}
let ab = new ArrayBuffer(bytes.length);
let ia = new Uint8Array(ab);
for (let i = 0; i < bytes.length; i++) {
ia[i] = bytes.charCodeAt(i);
}
let result = new Blob([ab], {
type: type,
});
let result1 = new File([result], contentName, {
type: type,
});
result1.path = window.URL.createObjectURL(result);
return result1;
},
async getImageInfo(src) {
let _this = this;
await uni.getImageInfo({
src,
success(res) {
console.log("压缩前", res);
let canvasWidth = res.width;
let canvasHeight = res.height;
let img = new Image();
img.src = res.path;
let canvas = document.createElement("canvas");
let ctx = canvas.getContext("2d");
if (canvasWidth >= 1920) {
canvas.width = canvasWidth * 0.5;
} else {
canvas.width = canvasWidth;
}
if (canvasHeight >= 1080) {
canvas.height = canvasHeight * 0.5;
} else {
canvas.height = canvasHeight;
}
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
let base64 = canvas.toDataURL("image/jpeg", 0.3);
let flie = _this.convertBase64UrlToFile({
dataURL: base64,
type: "image/jpeg",
contentName: "",
});
console.log("压缩后", flie);
_this.uploadFile(flie);
},
});
},