vue3 + elementPlus多图片上传

需要手动调用上传接口的请驻足!!!

需求:图片数量限制最多 5 张,每张图片不得超过 10M。

1、el-upload 组件绑定的 :file-list 定义 fileList 单独维护。

2、定义 photoList 数组用来保存需要传给后端接口的数据。

3、此处上传图片事件是 on-change,并且加了 :auto-upload="false" 阻止自动上传文件。

<el-upload
    :limit="5"
    action="#"
    list-type="picture-card"
    :on-exceed="handleExceed"
    v-model:file-list="fileList"
    :on-change="uploadImg"
    :auto-upload="false"
    accept="image/jpg,image/jpeg,image/png,image/webp"
    >
    <el-icon><Plus /></el-icon>
    
    <template #file="{ file }">
      <div>
        <img class="el-upload-list__item-thumbnail" :src="file.url" alt="" />
        <span class="el-upload-list__item-actions">
          <span class="el-upload-list__item-preview" @click="handlePictureCardPreview(file)">
            <el-icon><zoom-in /></el-icon>
          </span>
          <span class="el-upload-list__item-delete" @click="handleRemove(file)">
            <el-icon><Delete /></el-icon>
          </span>
        </span>
      </div>
    </template>
    <template #tip>
      <div class="el-upload__tip"> 可以上传5张照片,单个不超过10M </div>
    </template>
</el-upload>

// 预览弹窗
<el-dialog append-to-body v-model="dialogVisible">
    <img width="100%" :src="state.dialogImageUrl" alt="" />
</el-dialog>
import { ElMessage, UploadUserFile } from 'element-plus';

let dialogVisible = ref(false);
let fileList: any = reactive<UploadUserFile[]>([]);
const state = reactive({
    photoList: [],
    dialogImageUrl: '',
})

// 上传文件
const uploadImg = (file) => {
    // 单个文件大小不能超过50M
    let fileSize = file.size / 1024;
    let maxSize = 1024 * 10;
    if (fileSize > maxSize) {
      ElMessage({
        message: '单个文件最大10M',
        type: 'warning',
      });
      return;
    }
    let rawFile = file.raw;

    let formData = new FormData();
    formData.append('fileData', rawFile);
    formData.append('fileType', 'testresultpic');
    formData.append('workId', props.rowData.workId);
    // 调用封装好的接口
    uploadFile(formData).then((res) => {
      ElMessage({
        type: 'success',
        message: '上传成功',
      });
      // 此处 res 的格式为{ fileName: '奥黛丽赫本', fileUrl: '/xxx' }
      state.photoList.push(res);
    });
};

// 删除
const handleRemove = (file) => {
    const index = fileList.indexOf(file);
    fileList.splice(index, 1);
    state.photoList = state.photoList.filter((item) => item.fileName !== file.name);
};

// 预览
const handlePictureCardPreview = (file) => {
    state.dialogImageUrl = file.url;
    dialogVisible.value = true;
};

// 上传照片超出限制的提示
const handleExceed = () => {
    ElMessage({
      message: '最多上传5张照片',
      type: 'warning',
    });
};

有疑问的请留言。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3和Element Plus都是现代化的前端开发框架,可以很方便地实现图片上传的功能。 首先,我们需要在Vue3项目中安装Element Plus。可以使用以下命令安装Element Plus: ``` npm install element-plus --save ``` 然后,在Vue3组件中引入Element Plus的上传组件,并在模板中使用它。我们需要设置一些参数来定义上传的行为,比如上传文件的类型、大小限制等。 ```html <template> <div> <el-upload action="/api/upload" :headers="headers" :on-success="onSuccess" :before-upload="beforeUpload" :file-list="fileList" :limit="limit" :accept="accept" :show-file-list="false" > <el-button>点击上传图片</el-button> </el-upload> <el-image v-if="imageUrl" :src="imageUrl"></el-image> </div> </template> ``` 在这个示例中,我们使用`el-upload`组件来实现文件上传。`action`属性指定了上传文件的接口地址,`headers`属性可以设置请求的头部信息。`on-success`是上传成功后的回调函数,`before-upload`可以在上传前进行一些验证操作。 接下来,我们需要在Vue3组件的`<script>`标签中完成一些逻辑处理。 ```javascript <script> import { ref } from 'vue'; export default { data() { return { fileList: [], // 上传文件列表 imageUrl: '', // 预览图片地址 limit: 1, // 最大上传数量 accept: 'image/*', // 接受的文件类型 headers: { Authorization: 'Bearer token', // 设置请求头部信息 }, }; }, methods: { beforeUpload(file) { const isLt2M = file.size / 1024 / 1024 < 2; // 判断文件大小是否小于2MB if (!isLt2M) { this.$message.error('上传图片大小不能超过 2MB!'); return false; } return true; }, onSuccess(response) { // 上传成功后的回调函数 this.fileList.push(response.file); // 将文件添加到上传文件列表 this.imageUrl = response.imageUrl; // 设置预览图片地址 }, }, }; </script> ``` 在这个示例中,我们使用了Vue3中的`ref`函数来定义了一些响应式数据,比如上传文件列表和预览图片地址。`beforeUpload`函数用来验证文件的大小是否符合要求,在这个示例中我们限制文件大小不能超过2MB。`onSuccess`是上传成功后的回调函数,我们将文件添加到上传文件列表中,并设置预览图片地址。 最后,我们可以根据实际需求来使用这个上传图片的组件,并且通过访问`fileList`和`imageUrl`来对上传图片进行处理。 这就是使用Vue3和Element Plus实现图片上传的基本步骤,通过设置参数和回调函数,我们可以很方便地完成图片上传的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值