vue2中关于elementUI的自定义上传

10 篇文章 0 订阅
9 篇文章 0 订阅
本文讲述了在项目中使用elementUI组件实现文件上传时遇到的问题,包括自定义上传函数的配置、上传闪动问题的解决策略,以及图片的显示、删除操作。重点介绍了如何设置http-request和FormData,以及处理图片回显和删除的技巧。
摘要由CSDN通过智能技术生成

一、项目背景

在项目中采用了admin模板,和elementUI组件。需求为手动选择文件可多选上传并显示图片 

效果图为

二、自定义上传中遇到的问题

http-request覆盖默认的上传行为,可以自定义上传的实现function

在文档中存在这样一个自定义上传,但是在使用过程中出现了一些问题,

自定义上传函数不触发和上传失败

  1.  action必填写,可以为’'字符串   :action='#'
  2.  :auto-upload=“false” 必须删除!!! 默认就是true.改为false虽然不自动提交,但是因为action为’',所以它不会提交.
  3. 自定义需要设置http-request方法 且 一旦设置自定义上传.则:on-success, :on-error 失效. 一切都在上传回调或者onchange等里面写
  4. 因为文件类型,需要用的file ,FormData格式.所以接口请求的时候需要设置 header为 ‘Content-Type’: ‘multipart/form-data’;如果上传接口需要Token还要在header里面加上token ; 因为本人是在统一axios接口请求封装上判断过config.date的类型 是否是文件类型.是的话 则将header设置为multipart/form-data;
  5. 如果需要自定上传,且需要自定义参数,则可以用:data和 :before-upload配合,其中 :before-upload可以自定义参数,before-upload要与auto-upload配合,auto-upload为true才生效。

 

        <el-upload
            action=""
            :before-upload="beforeAvatarUpload"
            :on-remove="removeUpload"
            multiple
            :on-success="successUpload"
            :file-list="form.photoList"
            :http-request="fileChange"
            list-type="picture-card"
          >
            <i slot="default" class="el-icon-plus"></i>
          </el-upload>

从上到下的字段分别是

上传地址、上传前的回调、移除的回调、多选、成功的回调、文件列表、自定义上传、列表展示类型

自定义上传

 // 自定义上传
    fileChange(data) {
      let file = data.file
      let formData = new FormData()
      formData.append('file', file)
      console.log('二进制文件', formData.get('file'))
      getuploadUserFile(formData).then(res => {
        // data.onSuccess(res)
        console.log(res)
        this.form.photoList.push({
          uid: res.logId,
          url: res.data
        })
        console.log(this.form.photoList)
      })
    },

自定义上传的函数中 在发送请求需要将file二进制文件采用formData格式配合请求头进行上传

formData的数据存入需要才有append加字段名才可以存入

注意的是,formData中存入的属性直接logformData是打印不出来的 需要采用get方法才能获取

图片上传的闪动问题

我的理解是uid的问题以及css问题

建议直接看这个文章 el-upload组件上传闪动的解决_el-upload上传一张limit为1的话会闪一下-CSDN博客

最方便的则是css强制关闭

Vue2+ElementUI实现照片墙时,上传抖动问题_element 图片回显会抖动一下-CSDN博客

图片的回显

需要绑定form-list这个字段

这个字段在显示过程中,读取的是url和uid两个参数进行回显

所以需要属性名操作,因为是图片集合所以才要遍历

List.photoList.forEach(item => {
          this.form.photoList.push({
            url: item
          })
        })

图片的删除

图片删除则是需要调用上传组件自身的删除,删除的回调中两个字段 一个file 一个fileList

使用fileList进行赋值修改

    // 删除上传文件显示操作

    removeUpload(file, fileList) {

      console.log(file)

      console.log(fileList)

      this.form.photoList = fileList

    },

这个做法比较粗糙。但是有效。。、

可以实现。在使用 element upload 和 axios 自定义上传时,可以通过监听 axios 的上传进度事件来更新 element upload 的进度条。具体实现步骤如下: 1. 在 element upload ,将 show-file-list 属性设置为 false,禁止显示上传文件列表,原因是自定义上传时不需要 element upload 自己去上传文件。 2. 在 element upload 的 before-upload 方法,将文件上传到服务器。在上传过程,监听 axios 的上传进度事件,更新 element upload 的进度条。 示例代码如下: ```html <el-upload :show-file-list="false" :on-preview="handlePreview" :before-upload="handleUpload"> <el-button>点击上传</el-button> </el-upload> ``` ```javascript handleUpload(file) { const formData = new FormData(); formData.append('file', file); axios.post('/api/upload', formData, { onUploadProgress: progressEvent => { // 更新 element upload 的进度条 this.$refs.upload.uploadFiles.forEach(item => { if (item.raw === file) { item.percentage = (progressEvent.loaded / progressEvent.total) * 100; } }); } }).then(response => { // 上传成功 }).catch(error => { // 上传失败 }); } ``` 在上面的示例代码,我们在 axios 的 post 请求通过 onUploadProgress 监听上传进度事件,并更新 element upload 对应文件的进度条。注意,在更新进度条时,需要通过 this.$refs.upload.uploadFiles 来获取 element upload 已经添加的文件列表,并找到对应文件来更新进度条。 这样就可以在使用 element upload 和 axios 自定义上传时,仍能实现 action 的进度效果了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值