<cn> #### 用户头像 点击上传用户头像,并使用 `beforeUpload` 限制用户上传的图片格式和大小。 `beforeUpload` 的返回值可以是一个 Promise 以支持也支持异步检查 </cn> <us> #### Avatar Click to upload user's avatar, and validate size and format of picture with `beforeUpload`. The return value of function `beforeUpload` can be a Promise to check asynchronously. </us> ```html <template> <a-upload name="avatar" listType="picture-card" class="avatar-uploader" :showUploadList="false" action="//jsonplaceholder.typicode.com/posts/" :beforeUpload="beforeUpload" @change="handleChange" > <img v-if="imageUrl" :src="imageUrl" alt="" /> <div v-else> <a-icon :type="loading ? 'loading' : 'plus'" /> <div class="ant-upload-text">Upload</div> </div> </a-upload> </template> <script> function getBase64(img, callback) { const reader = new FileReader(); reader.addEventListener('load', () => callback(reader.result)); reader.readAsDataURL(img); } export default { data () { return { loading: false, imageUrl: '', } }, methods: { handleChange(info) { if (info.file.status === 'uploading') { this.loading = true return; } if (info.file.status === 'done') { // Get this url from response in real world. getBase64(info.file.originFileObj, (imageUrl) => { this.imageUrl = imageUrl this.loading = false }); } }, beforeUpload(file) { const isJPG = file.type === 'image/jpeg'; if (!isJPG) { this.$message.error('You can only upload JPG file!'); } const isLt2M = file.size / 1024 / 1024 < 2; if (!isLt2M) { this.$message.error('Image must smaller than 2MB!'); } return isJPG && isLt2M; }, }, } </script> <style scoped> .avatar-uploader > .ant-upload { width: 128px; height: 128px; } </style> ```