CRM_26-07-21#story#8995,调度app上传行驶证自动压缩
This commit is contained in:
@@ -21,8 +21,6 @@
|
|||||||
v-model="vehicleLicenseFrontList"
|
v-model="vehicleLicenseFrontList"
|
||||||
:after-read="vehicleLicenseFrontHandler"
|
:after-read="vehicleLicenseFrontHandler"
|
||||||
@delete="vehicleLicenseFrontDelete"
|
@delete="vehicleLicenseFrontDelete"
|
||||||
@oversize="onOversize"
|
|
||||||
:max-size="5 * 1024 * 1024"
|
|
||||||
max-count="1"
|
max-count="1"
|
||||||
:preview-size="54"
|
:preview-size="54"
|
||||||
accept="image "
|
accept="image "
|
||||||
@@ -37,8 +35,6 @@
|
|||||||
v-model="vehicleLicenseBackList"
|
v-model="vehicleLicenseBackList"
|
||||||
:after-read="vehicleLicenseBackHandler"
|
:after-read="vehicleLicenseBackHandler"
|
||||||
@delete="vehicleLicenseBackDelete"
|
@delete="vehicleLicenseBackDelete"
|
||||||
@oversize="onOversize"
|
|
||||||
:max-size="5 * 1024 * 1024"
|
|
||||||
max-count="1"
|
max-count="1"
|
||||||
:preview-size="54"
|
:preview-size="54"
|
||||||
accept="image "
|
accept="image "
|
||||||
@@ -53,8 +49,6 @@
|
|||||||
v-model="vehicleLicenseCarPhotoList"
|
v-model="vehicleLicenseCarPhotoList"
|
||||||
:after-read="vehicleLicenseCarHandler"
|
:after-read="vehicleLicenseCarHandler"
|
||||||
@delete="vehicleLicenseCarPhotoDelete"
|
@delete="vehicleLicenseCarPhotoDelete"
|
||||||
@oversize="onOversize"
|
|
||||||
:max-size="5 * 1024 * 1024"
|
|
||||||
max-count="1"
|
max-count="1"
|
||||||
:preview-size="54"
|
:preview-size="54"
|
||||||
accept="image "
|
accept="image "
|
||||||
@@ -69,8 +63,6 @@
|
|||||||
v-model="vehicleFrontPhotoList"
|
v-model="vehicleFrontPhotoList"
|
||||||
:after-read="vehicleFrontPhotoHandler"
|
:after-read="vehicleFrontPhotoHandler"
|
||||||
@delete="vehicleFrontPhotoDelete"
|
@delete="vehicleFrontPhotoDelete"
|
||||||
@oversize="onOversize"
|
|
||||||
:max-size="5 * 1024 * 1024"
|
|
||||||
max-count="1"
|
max-count="1"
|
||||||
:preview-size="54"
|
:preview-size="54"
|
||||||
accept="image "
|
accept="image "
|
||||||
@@ -803,33 +795,153 @@ export default {
|
|||||||
onOversize() {
|
onOversize() {
|
||||||
this.$toast(`文件大小不能超过5M`)
|
this.$toast(`文件大小不能超过5M`)
|
||||||
},
|
},
|
||||||
|
blobToDataURL(blob) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const reader = new FileReader();
|
||||||
|
reader.onload = (e) => resolve(e.target.result);
|
||||||
|
reader.onerror = () => reject(new Error('读取压缩图片失败'));
|
||||||
|
reader.readAsDataURL(blob);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
compressImage(file, maxSize = 5 * 1024 * 1024) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const reader = new FileReader();
|
||||||
|
reader.onload = (e) => {
|
||||||
|
const img = new Image();
|
||||||
|
img.onload = () => {
|
||||||
|
const canvas = document.createElement('canvas');
|
||||||
|
const ctx = canvas.getContext('2d');
|
||||||
|
const originWidth = img.width;
|
||||||
|
const originHeight = img.height;
|
||||||
|
|
||||||
|
const tryQuality = (quality = 0.9) => {
|
||||||
|
canvas.width = originWidth;
|
||||||
|
canvas.height = originHeight;
|
||||||
|
ctx.clearRect(0, 0, originWidth, originHeight);
|
||||||
|
ctx.drawImage(img, 0, 0, originWidth, originHeight);
|
||||||
|
canvas.toBlob((blob) => {
|
||||||
|
if (!blob) return reject(new Error('压缩失败'));
|
||||||
|
if (blob.size <= maxSize || quality <= 0.1) {
|
||||||
|
if (blob.size <= maxSize) {
|
||||||
|
resolve(blob);
|
||||||
|
} else {
|
||||||
|
tryResolution();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
tryQuality(quality - 0.1);
|
||||||
|
}, 'image/jpeg', quality);
|
||||||
|
};
|
||||||
|
|
||||||
|
const tryResolution = (scale = 0.9, quality = 0.8) => {
|
||||||
|
const width = Math.floor(originWidth * scale);
|
||||||
|
const height = Math.floor(originHeight * scale);
|
||||||
|
canvas.width = width;
|
||||||
|
canvas.height = height;
|
||||||
|
ctx.clearRect(0, 0, width, height);
|
||||||
|
ctx.drawImage(img, 0, 0, width, height);
|
||||||
|
canvas.toBlob((blob) => {
|
||||||
|
if (!blob) return reject(new Error('压缩失败'));
|
||||||
|
if (blob.size <= maxSize || scale <= 0.1) {
|
||||||
|
if (blob.size <= maxSize) {
|
||||||
|
resolve(blob);
|
||||||
|
} else {
|
||||||
|
reject(new Error('超过5M'));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
tryResolution(scale - 0.1, quality);
|
||||||
|
}, 'image/jpeg', quality);
|
||||||
|
};
|
||||||
|
|
||||||
|
tryQuality();
|
||||||
|
};
|
||||||
|
img.onerror = () => reject(new Error('图片加载失败'));
|
||||||
|
img.src = e.target.result;
|
||||||
|
};
|
||||||
|
reader.onerror = () => reject(new Error('文件读取失败'));
|
||||||
|
reader.readAsDataURL(file);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async compressFileItem(fileItem, maxSize = 5 * 1024 * 1024) {
|
||||||
|
const rawFile = fileItem.file;
|
||||||
|
if (rawFile.size <= maxSize) return rawFile;
|
||||||
|
const blob = await this.compressImage(rawFile, maxSize);
|
||||||
|
if (blob.size > maxSize) {
|
||||||
|
throw new Error('超过5M');
|
||||||
|
}
|
||||||
|
const fileName = rawFile.name.replace(/\.[^.]+$/, '') + '.jpg';
|
||||||
|
const compressedFile = new File([blob], fileName, { type: 'image/jpeg' });
|
||||||
|
fileItem.file = compressedFile;
|
||||||
|
fileItem.size = compressedFile.size;
|
||||||
|
fileItem.content = await this.blobToDataURL(blob);
|
||||||
|
const mb1 = (compressedFile.size / 1024 / 1024).toFixed(2);
|
||||||
|
console.log(`压缩后为:${mb1}M`)
|
||||||
|
return compressedFile;
|
||||||
|
},
|
||||||
async vehicleLicenseFrontHandler(file) { // 上传 行驶证首页
|
async vehicleLicenseFrontHandler(file) { // 上传 行驶证首页
|
||||||
const formData = new FormData();
|
try {
|
||||||
formData.append("file" , file.file);
|
const uploadFile = await this.compressFileItem(file);
|
||||||
let res = await uploadImage(formData)
|
if (uploadFile.size > 5 * 1024 * 1024) {
|
||||||
this.vehicleLicenseFront = res.data;
|
this.onOversize();
|
||||||
await this.vehicleOcrHandler();
|
return;
|
||||||
|
}
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append("file" , uploadFile);
|
||||||
|
let res = await uploadImage(formData)
|
||||||
|
this.vehicleLicenseFront = res.data;
|
||||||
|
await this.vehicleOcrHandler();
|
||||||
|
} catch (e) {
|
||||||
|
this.onOversize();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
async vehicleLicenseBackHandler(file) { // 上传 行驶证副页
|
async vehicleLicenseBackHandler(file) { // 上传 行驶证副页
|
||||||
this.vehicleLicenseBackOcrFlag = true;
|
try {
|
||||||
const formData = new FormData();
|
this.vehicleLicenseBackOcrFlag = true;
|
||||||
formData.append("file" , file.file);
|
const uploadFile = await this.compressFileItem(file);
|
||||||
let res = await uploadImage(formData);
|
if (uploadFile.size > 5 * 1024 * 1024) {
|
||||||
this.vehicleLicenseBack = res.data;
|
this.onOversize();
|
||||||
await this.vehicleBackOcrHandler();
|
return;
|
||||||
|
}
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append("file" , uploadFile);
|
||||||
|
let res = await uploadImage(formData);
|
||||||
|
this.vehicleLicenseBack = res.data;
|
||||||
|
await this.vehicleBackOcrHandler();
|
||||||
|
} catch (e) {
|
||||||
|
this.onOversize();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
async vehicleLicenseCarHandler(file) { // 上传 行驶证车辆照片
|
async vehicleLicenseCarHandler(file) { // 上传 行驶证车辆照片
|
||||||
const formData = new FormData();
|
try {
|
||||||
formData.append("file" , file.file);
|
const uploadFile = await this.compressFileItem(file);
|
||||||
let res = await uploadImage(formData);
|
if (uploadFile.size > 5 * 1024 * 1024) {
|
||||||
this.vehicleLicenseCarPhoto = res.data;
|
this.onOversize();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append("file" , uploadFile);
|
||||||
|
let res = await uploadImage(formData);
|
||||||
|
this.vehicleLicenseCarPhoto = res.data;
|
||||||
|
} catch (e) {
|
||||||
|
this.onOversize();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
async vehicleFrontPhotoHandler(file) { // 上传 车头照
|
async vehicleFrontPhotoHandler(file) { // 上传 车头照
|
||||||
const formData = new FormData();
|
try {
|
||||||
formData.append("file" , file.file);
|
const uploadFile = await this.compressFileItem(file);
|
||||||
let res = await uploadImage(formData);
|
if (uploadFile.size > 5 * 1024 * 1024) {
|
||||||
this.vehicleFrontPhoto = res.data;
|
this.onOversize();
|
||||||
await this.ocrCarFrontHandler()
|
return;
|
||||||
|
}
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append("file" , uploadFile);
|
||||||
|
let res = await uploadImage(formData);
|
||||||
|
this.vehicleFrontPhoto = res.data;
|
||||||
|
await this.ocrCarFrontHandler()
|
||||||
|
} catch (e) {
|
||||||
|
this.onOversize();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
vehicleLicenseFrontDelete() { // 删除 行驶证首页
|
vehicleLicenseFrontDelete() { // 删除 行驶证首页
|
||||||
this.vehicleLicenseFront = '';
|
this.vehicleLicenseFront = '';
|
||||||
|
|||||||
Reference in New Issue
Block a user