el-upload手动上传多张图片

需求:

需求为一次性上传多张图片,并可以为图片添加描述信息,且后端接口一次只能传一张图片

思路:

循环遍历上传的图片列表依次处理字段并请求接口,等所有的接口请求完成后再关闭弹框

先将上传图片转成base64格式,放入imageList再表格中展示

handleChange(file) {
            if (file.raw.type !== 'image/jpeg' && file.raw.type !== 'image/png' && file.raw.type !== 'image/gif') {
                this.$message.error('只能上传图片文件!');
                return false;
            }
            if(file.raw) {
                this.getBase64(file.raw, imageUrl => {
                    this.imageList.push({
                        describe: '',
                        imageUrl: imageUrl
                    });
                    this.previewSrcList.push(imageUrl);
                });
            }
        },
        getBase64(file, callback) {
            const reader = new FileReader(); // 用于读取文件
            reader.addEventListener('load', () => callback(reader.result));
            reader.readAsDataURL(file);
        }

再点击按钮时请求后端接口实现上传

submitUpload() {
            // 遍历循环上传图片
            let uploadPromises = this.imageList.map(item => {
                return new Promise((resolve, reject) => {
                    let params = {
                        PIC_INFO: item.imageUrl,
                        PIC_DES: item.describe,
                        WORK_ID: this.workGuid,
                        DES_TYPE: this.title
                    }
                    api.UploadWorkImg(params).then(res => {
                        resolve(res); // 上传成功
                    }).catch(error => {
                        this.$message.error('上传图片失败:', error);
                        reject(error); // 上传失败
                    });
                });
            });
            Promise.all(uploadPromises).then(() => {
                // 所有图片上传完成后的操作
                this.$message.success('图片上传成功');
                this.uploadVisible = false;
                this.title = '';
                this.workGuid = '';
            }).catch(error => {
                // 如果有上传失败的情况,处理错误
                this.$message.error('至少有一张图片上传失败', error);
            });
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
el-upload组件可以通过设置`multiple`属性来支持上传多张图片。具体实现步骤如下: 1. 在el-upload组件上设置`multiple`属性,例如: ```html <el-upload class="upload-demo" action="https://jsonplaceholder.typicode.com/posts/" :multiple="true" :on-success="handleSuccess" :on-remove="handleRemove" :before-upload="beforeUpload"> <el-button size="small" type="primary">点击上传</el-button> <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> </el-upload> ``` 2. 在`beforeUpload`方法中处理上传的多个文件,例如: ```javascript beforeUpload(file) { // 判断上传的文件是否是图片类型 const isJPG = file.type === 'image/jpeg' || file.type === 'image/png'; if (!isJPG) { this.$message.error('只能上传jpg/png文件!'); return false; } // 判断上传的文件大小是否超过规定大小 const isLt2M = file.size / 1024 / 1024 < 0.5; if (!isLt2M) { this.$message.error('上传文件大小不能超过 500KB!'); return false; } // 处理多个文件 this.uploadFiles.push(file); return false; // 阻止上传,等待手动触发上传 }, ``` 在这个例子中,我们通过判断文件类型和文件大小来限制上传的文件格式和大小,并将上传的文件存储在`uploadFiles`数组中,等待手动触发上传。 3. 在`handleSuccess`方法中处理上传成功后的文件,例如: ```javascript handleSuccess(response, file, fileList) { console.log(response, file, fileList); }, ``` 在这个例子中,我们可以通过`fileList`参数获取上传成功的所有文件信息。 4. 在`handleRemove`方法中处理删除上传的文件,例如: ```javascript handleRemove(file, fileList) { this.uploadFiles = fileList; }, ``` 在这个例子中,我们可以通过`fileList`参数获取删除后的所有文件信息。 通过这些步骤,我们就可以实现el-upload组件的多图片上传功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值