vue图片上传缩略图以及进度条的实现

  • 首先是图片的上传(结构)其中add_img函数的参数由自己决定。
<input type="file" id="idfront" @change.self='add_img($event, 0, key)'>

<progress :value="progress" max="100" v-show="showp"></progress>
  • 然后来看js当中的内容要怎么写
    data (){}里面的return中可以先写一个固定的默认图片路径src,等拿到返回url的时候再替换为需要的缩略图
data () {
    return {
      formNum: ['1'],
      showp: true,
      progress: '',
      imgData: {accept: 'image/jpeg, image/png, image/jpg'},
      src: require('../../../../assets/images/camera.png'),
      info: {
      	imgup: ''
      }
    };
  }
add_img (event, key, index) {
      let _this = this
      var files = event.target.files[0]
      if (!event || !window.FileReader) return  // 看支持不支持FileReader
      let reader = new FileReader()
      reader.readAsDataURL(files) // 这里是最关键的一步,转换就在这里
      reader.onloadend = function () {
        _this.src = this.result
      }
      //以上是缩略图部分代码this.result就是url,赋值给了默认的src
      
      let img1 = event.target.files[0];
      let type = img1.type;
      let size = img1.size;
      if (this.imgData.accept.indexOf(type) === -1) {  
       	console.log('支持上传的格式不对');
        return false;  
      }  
      //以上对图片格式的限制,imgData在return里面可见
       if (size>5242880) {  
       console.log('上传图片不能大于5m')
        return false;  
      }  
      //以上对图片大小的限制
      let form = new FormData();
      form.append('file',img1);
      axios.post(baseUrl,form,{
        headers:{'Content-Type':'multipart/form-data'},
        withCredentials:true
        onUploadProgress: progressEvent => {
          var complete = (progressEvent.loaded / progressEvent.total * 100 | 0);
          console.log(complete)  //complete是一个变化的值,最大100上传完成
          this.progress = complete  //赋值,进度条变化,通过值或者其他事件还可以用showp使得进度条是否隐藏
        }
      }).then(response => {  
        let url = response.data.data.file_url;//上传成功的返回url
        if (key === 0) {
          this.info.imgup = url;
        } 
     	console.log('上传成功')
      }).catch(error => {  
        console.log('失败'error)
      })     
       //还可以在其中尝试更多的东西我暂时尝试到这里了
}
  • 基本就到这里就结束了,附加我在网上找到的进度条的兼容样式写法
	progress {
        width: 100%;
        border-top: 1px solid #0086ff;  
        border-bottom: 1px solid #0086ff;  
        background-color:#e6e6e6;
        color: #0086ff; /*IE10*/
    }
    progress::-moz-progress-bar { background: #0086ff; }
    progress::-webkit-progress-bar { background: #e6e6e6; }
    progress::-webkit-progress-value  { background: #0086ff; }
    /*我用的是上面这几句,下面是网站找到的我也没有试过,有兴趣的可以去试试*/
    
    /*ie6-ie9*/
	progress ie {
	    display:block;
	    height: 100%;
	    background: #0064B4;
	}
	progress::-moz-progress-bar { background: #0064B4; }
	progress::-webkit-progress-bar { background: #e6e6e6; }
	progress::-webkit-progress-value  { background: #0064B4; }
  • 加一张图,是别人总结的@张鑫旭
    兼容性
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值