使用ant desgin vue组件、实现图片上传限制图片尺寸范围
- 需要控制上传图片的比例
- 上传图片的数量
- 如果上传图片尺寸影响展示效果,给出相应提示
<template>
<a-modal
title="提交"
:visible.sync="visible"
width="550px"
class="modal-submit"
@ok="handleSubmit"
>
<a-form :form="form" :label-col="{ span: 7 }" :wrapper-col="{ span: 17 }">
<a-form-item label="标题">
<a-input
placeholder="请输入标题"
v-decorator="['title', { rules: [{ required: true, message: '请输入标题' }] }]"
/>
</a-form-item>
<a-form-item label="内容">
<a-textarea
v-decorator="['content', { rules: [{ required: true, message: '请输入内容' }] }]"
placeholder="请输入内容"
:rows="5"
/>
</a-form-item>
<a-form-item label="上传图片">
<a-upload
class="upload"
accept="image/png, image/jpeg"
v-decorator="['files']"
list-type="picture-card"
:file-list="fileList"
:before-upload="beforeUpload"
@change="handleChange"
>
<div v-if="fileList.length < 3">
<a-icon type="plus" :style="{ fontSize: '26px'}"/>
</div>
</a-upload>
<p style="color: red;margin: 0;">*最多可上传三张比例为16:9的图片</p>
</a-form-item>
</a-form>
</a-modal>
</template>
<script>
export default {
name: 'Submit',
data() {
return {
fileList: [],
visible: false,
form: this.$form.createForm(this, { name: 'submit' }),
};
},
methods: {
handleOk(e) {
this.visible = false;
},
handleSubmit() {
},
handleChange({ fileList }) {
this.fileList = fileList;
},
ruleImageSize(file) {
return new Promise((resolve, reject) => {
let fileReader = new FileReader();
fileReader.onload = (e) => {
let src = e.target.result;
const image = new Image();
image.onload = () => {
let res = (image.width / image.height).toFixed(2);
const num = parseFloat(res);
let flag = num > 1.5 && num <= 1.78;
if (!flag) {
reject(new Error('图片尺寸不符,请上传比例为16:9的图片'));
} else {
resolve(true);
}
};
image.onerror = reject;
image.src = src;
};
fileReader.readAsDataURL(file);
});
},
beforeUpload(file) {
this.ruleImageSize(file).then((res) => {
console.log(res);
}).catch((error) => {
console.log(error);
this.$message.warning('当前上传图片尺寸会影响后期展示效果,请换图上传!');
});
return false;
},
},
};
</script>