Vue+Vant 解决uploader组件进行上传图片的问题

1 篇文章 0 订阅
1 篇文章 0 订阅

一、首先vant中提供的Uploader没有属性可以直接填写后端路径直接请求,需要在文件读取完成后的回调函数(after-read)中进行ajax或axios的请求。

  1. 因为没有属性可以直接请求接口,所以不能像elemntui直接填写接口路径就行,需要new FormData()来追加文件数据然后通过axios传给后端;
  2. 请求头需要设置为"Content-Type": “multipart/form-data”;
// uploader组件
<van-uploader class="list-upload" :after-read="afterRead" accept="image/jpeg,image/png" :preview-image="false" />
//文件读取完回调函数
afterRead(file) {
    var data = new FormData();
    data.append('file', file.file);
    let config = {
       headers: { //添加请求头
          "Content-Type": "multipart/form-data"
       }
    };
    //上传图片
    axios.post("/api/bill/UploadImage", data, config).then(res => {
       console.log("res", res);
       if (res.data.status == 200) {
          this.fileList.push(res.data.data);
       } else {
          this.$dialog.alert({
            title: "提示",
            message: res.msg,
          });
       }
    })
}

二、上面完成后就可以上传图片到服务端并按照需求返回该图片的路径了,开开心心的进行下一步,根据文档用v-model=“fileList” 来实现数据双重绑定啦。呐呢~谁知又是一个坑,该属性在上传图片完后自动把图片的信息放到fileList数组里,数据格式跟自定义的不一样??啊!!!脑瓜疼啊,本来想每次上传后返回图片路径直接push到fileList里,然后列表也会自动变化就完事了。谁曾想。。。
在这里插入图片描述
行吧,为了实现功能,就自己动手改造下吧。。。

效果:上传图片后需要更新显示出来,点击图片可以放大预览。

思路:

  1. 首先需要写个div,里面遍历上传的图片。这里我是直接拿上传后的服务器路径放到fileList里直接遍历显示;
  2. 使用ImagePreview组件来进行点击实现图片预览;
<div class="form-item form-voucher">
    <div class="item-title">上传凭证</div>
    <div class="item-list">
        <van-image class="list-img" v-for="(item,index) in fileList" :key="index" :src="item" @click="previewImage(item,index)">
             <van-icon name="cross" @click="onDelImage(index)"/>
        </van-image>
        <van-uploader class="list-upload" :after-read="afterRead" accept="image/jpeg,image/png" :preview-image="false" />
    </div>
    <van-image-preview v-model="isShowPreview" :images="previewImages"></van-image-preview>
</div>
//点击图片放大浏览
previewImage(url, index) {
   this.isShowPreview = true;
   this.previewImages = [url];
},

//删除图片
onDelImage(index){
   this.fileList.splice(index,1);
},

到这里,使用uploader组件上传图片就完成啦!

后端:

我后端接口是用.net webapi写的,需要参考的朋友可以看我上一篇文章
https://blog.csdn.net/junxianzhou/article/details/118787539

移动端Vue VantUploader组件可以很方便地实现上传、压缩和旋转图片功能。首先,我们需要在Vue项目引入Vue Vant库,并在需要使用Uploader组件注册该组件。 在页面使用Uploader组件时,我们可以设置相关的属性来实现功能需求。首先是上传图片功能,可以通过设置`action`属性来指定图片上传的后端接口地址。上传成功后,可以通过监听`@success`事件来处理上传成功的逻辑,例如显示上传成功的提示信息或者将上传成功的图片URL保存到数据库等。 对于压缩图片的功能,我们可以使用组件提供的`beforeRead`方法来获取用户要上传的图片文件对象。然后,利用`HTMLCanvasElement`的`toBlob`方法对图片进行压缩,并将压缩后的图片对象传给Uploader组件进行上传。在压缩图片时,可以设置压缩的尺寸或者压缩的质量、压缩比等参数,以控制压缩后的图片大小适应实际需求。 要实现图片旋转的功能,我们可以利用`EXIF.js`库来读取图片的EXIF信息,获取图片的拍摄方向。然后,根据拍摄方向来确定图片需要旋转的角度,再借助`canvas`的`rotate`方法对图片进行旋转。旋转后的图片可以在`@success`事件触发后重新渲染到页面上,或者直接发送到后端进行保存。 总结来说,移动端Vue VantUploader组件通过设置相关属性和监听事件,配合压缩工具和EXIF库,可以非常方便地实现图片上传、压缩和旋转功能,满足移动端图片处理的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值