van-uploader上传图片后,再次编辑,回显预览

首先是正常上传的代码

<van-uploader
    :class="{
        'upload-type-file':type =='附件',
        'upload-type-image':type =='图片'
    :result-type="type =='附件'?'file’:'dataUrl'"
    :disabled="props.notAllowed != false"
    multiple
    :accept="accept"
    :max-count="props.fileLimit == 0? undefined : props.fileLimit'
    v-model="fileList"
    :after-read="afterRead"
    @click-preview="previewpic'
    :preview-size="type =='附件'?:40
    @delete="removeFile"
    style="display: block"
>
    <van-button
        v-if="type =='图片'"
        icon="plus'
        native-type="button
        class="upload-btn"
        plain
    ></van-button>
    <van-button
        v-else-if="type =='附件'”
        round
        size="small"
        color="linear-gradient(90deg,#ff7e34 0%,#ffb58b 100%)"
        block
        icon="plus"
        native-type="button"
    >上传附件</van-button>
</van-uploader>

回显文件列表

观察返回数据,可得到fileId数组,但并不满足van-uploader的fileList,可以看到有个file对象,需要进行数据处理,才能正确显示文件列表

返回数据

uploader上传的文件列表

// 编辑状态,回显文件列表使
if(this.formData[this.id].length>0){
   this.filelist=this.formData[this.id].map(item=>{
      return {
        ...item,
        file:{
           name:item.fileName
        }
      }
   })
}

after-read

是文件读取完成后的回调函数(async 为默认值时必填)

自定义上传样式

通过插槽可以自定义上传区域的样式,将上传按钮写在需要的地方

<van-uploader>
  <van-button icon="photo" type="primary">上传图片</van-button>
</van-uploader>

ImagePreview预览

预览通过vant的ImagePreview组件,请求接口返回base64来实现,使用前先引入

//request.js文件写请求方法
$httpDown:function(val){
    const target=`/wdbo/api/file/viewBase64/${val}`
    return ddjwt.get(target)
}

//使用前先引入
import {ImagePreview} form 'vant'

previewPic(val){
  console.log('val',val)
  const {fileName,fileId}=val
  if(fileName){
     const fileType=fileName.split('.')[1]console.log('fileType',fileType)
     if(fileType=='png'||lfileType='jpg' ){
        request.$httpDown(fileId).then((res)=>{
          console.log(JS0N.parse(res.data).data);
            ImagePreview({
              images:[ `data:image/jpeg;base64,`+ JSON.parse(res.data).data]
              closeable:true
            })
        })
    }
  }
}

 文件上传

创建formData对象,正确传参后端上传接口进行上传

html中的 v-model="fileList"为绑定的文件列表数值

afterRead(fileParams, detail){
    if(Array.isArray(fileParams)){
        fileParams.forEach((file)=>{this.uploadFile(file);});
    }else {
        this.uploadFile(fileParams)
    }
}

uploadFile(file){
    file.status = "uploading";
    file.message ="上传中...";
    let formData =new FormData();
    formData.append("file", file.file);
    request.$httpUpload(formData).then((res)=>{
        if(res.success){
            file.status ="done";
            file.message =“上传完成”;
            file.fileId = res.data;
            // 同步表单数据
            this.formData[this.id].push({
                fileId: file.fileId,
                fileName: file.file.name,
                size:this.formatFilesize(file.file.size)
            });
        else {
            file.fileId = "error".
            file.status ="failed",
            file.message ="上传失败”,
    });
}

文件删除

//有时只是本地短暂删除,不保存就不算删除,所以只是进行一个简单的数组删除,视具体情况而定

removeFile(file, detail){
    let _index= this.formData[this.id].
        findIndex((item)=>item.fileId == file.fileld) 
    this.formData[this.id].splice(_index, 1);
},

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
van-uploader是一款基于Vue.js的上传组件,支持单个或批量上传的功能,并且可以限制上传的文件类型、大小等参数。 使用van-uploader可以快速实现文件上传功能,以下是上传图片的实例: 1.在Vue组件中引用van-uploader组件 ``` <van-uploader action="//example.com/upload" :on-success="handleSuccess" /> ``` 其中action属性指定上传文件的地址,on-success属性指定上传成功后的回调函数。 2.定义handleSuccess函数,用于处理上传成功后的操作 ``` methods: { handleSuccess(response) { console.log(response); } } ``` 上传成功后,服务器会返回一个响应对象response,我们可以在handleSuccess函数中对返回的数据进行处理。 3.对上传组件进行配置,限制上传文件的类型、大小等属性 ``` <van-uploader action="//example.com/upload" :before-upload="beforeUpload" :max-size="5 * 1024 * 1024" accept="image/*" /> ``` 其中before-upload属性指定在上传前进行的操作,可以用来限制上传文件的类型、大小等属性,max-size属性限制上传文件的最大大小,accept属性限制上传文件的类型,此处指定只能上传图片文件。 4.在Vue实例中定义beforeUpload函数,实现上传前的参数设置 ``` methods: { beforeUpload(file) { console.log(file); const isJPG = file.type === 'image/jpeg'; const isLt2M = file.size / 1024 / 1024 < 2; if (!isJPG) { this.$toast('上传图片只能是 JPG 格式!'); } if (!isLt2M) { this.$toast('上传图片大小不能超过 2MB!'); } return isJPG && isLt2M; } } ``` beforeUpload函数会在上传前调用,可以用来设置上传时的参数,这里我们实现了限制上传图片的格式和大小的功能。 以上是使用van-uploader上传图片的实例,通过简单的配置和绑定函数就可以快速实现文件上传功能,适用于各种Web项目。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值