vue 使用原生组件上传图片的实例


Posted in Javascript onSeptember 08, 2020

需求描述:需要将后台返回的图片路径赋值到img的 src

1 一个页面上传一张图片

当一个页面只有一个位置需要上传图片,很简单,直接绑定上传按钮

html页面

<div class="col-md-4">
  <input class="hidden" accept="image/png,image/jpg" type="file" id="tempUploadFile" v-on:change="uploadPic($event)" />
  <input class="hidden" v-model="mapItem.MapIcon" />
  <img class="imgbgbox" v-bind:src="mapItem.MapIcon" />
 </div>

js代码:封装上传图片的方法

uploadPic(e) {
  var _self = this;
  var inputFile = e.target;
  if (!inputFile.files || inputFile.files.length <= 0) {
   return;
  }
  var file = inputFile.files[0];
  var formData = new FormData();
  formData.append('file', file);
  formData.append('SaveDir', 'Map/MapItem');
  formData.append("FileName", $.whiskey.tools.dateFormat(new Date(), "HHmmssffff"));
  $.ajax({
   url: "/Upload/UploadPic",//后台上传图片的方法
   type: 'POST',
   dateType: 'json',
   cache: false,
   data: formData,
   processData: false,
   contentType: false,
   success: function (res) {
    if (res.ResultType == 3) {
     var filePath = res.Data.file;//后台返回的图片路径
     _self.mapItem.MapIcon = filePath;//将路径赋值到声明的变量中
    }
   }
  });
},

2 一个页面上传多张图片

当一个页面有多个位置需要上传图片,如果按照上面方法,得需要绑定多个上传函数,所以我把重复的部分封装出来,用到了promise函数

html页面

<div class="col-md-4">
  <input class="hidden" accept="image/png,image/jpg" type="file" id="tempUploadFile" v-on:change="uploadPic($event)" />
  <input class="hidden" v-model="mapItem.MapIcon" />
  <img class="imgbgbox" v-bind:src="mapItem.MapIcon" />
 </div>

js代码:封装上传图片的方法

uploadPic(e) {
  var _self = this;
  var inputfile = e.target;
  _self.uploadImg(inputfile).then(data => {
   _self.mapItem.MapIcon = data;//data为取到的图片路径
  })
},
//封装函数
 uploadImg(inputFile) {
  var _self = this;
  if (!inputFile.files || inputFile.files.length <= 0) {
   return;
  } 
  return new Promise((suc,err)=>{
   var file = inputFile.files[0];
   var filepath = "";
   var formData = new FormData();
   formData.append('file', file);
   formData.append('SaveDir', 'Map/MapSite');
   formData.append("FileName", $.whiskey.tools.dateFormat(new Date(), "HHmmssffff"));
   $.ajax({
    url: "/Upload/UploadPic",
    type: 'POST',
    dateType: 'json',
    cache: false,
    data: formData,
    processData: false,
    async:false,
    contentType: false,
    success: function (res) {
     if (res.ResultType == 3) {
      filepath = res.Data.file;
      suc(filepath);
     }
    }
   });
  })
 },
},

补充知识:vue 利用原生input上传图片并预览并删除

看代码~

<template>
 <div class="com-upload-img">
 <div class="img_group">
  <div v-if="allowAddImg" class="img_box">
  <input type="file" accept="image/*" multiple="multiple" @change="changeImg($event)">
  <div class="filter" />
  </div>
  <div v-for="(item,index) in imgArr" :key="index" class="img_box">
  <div class="img_show_box">
   <img :src="item" alt="">
   <i class="img_delete" @click="deleteImg(index)" />
   <!-- <i class="img_delete" @click="imgArr.splice(index,1)"></i> -->
  </div>
  </div>
 </div>
 </div>
</template>

js部分

<script>
export default {
 name: 'ComUpLoad',
 data() {
 return {
  imgData: '',
  imgArr: [],
  imgSrc: '',
  allowAddImg: true
 }
 },
 methods: {
 changeImg: function(e) {
  var _this = this
  var imgLimit = 1024
  var files = e.target.files
  var image = new Image()
  if (files.length > 0) {
  var dd = 0
  var timer = setInterval(function() {
   if (files.item(dd).type !== 'image/png' && files.item(dd).type !== 'image/jpeg' && files.item(dd).type !== 'image/gif') {
   return false
   }
   if (files.item(dd).size > imgLimit * 102400) {
   // to do sth
   } else {
   image.src = window.URL.createObjectURL(files.item(dd))
   image.onload = function() {
    // 默认按比例压缩
    var w = image.width
    var h = image.height
    var scale = w / h
    w = 200
    h = w / scale
    // 默认图片质量为0.7,quality值越小,所绘制出的图像越模糊
    var quality = 0.7
    // 生成canvas
    var canvas = document.createElement('canvas')
    var ctx = canvas.getContext('2d')
    // 创建属性节点
    var anw = document.createAttribute('width')
    anw.nodeValue = w
    var anh = document.createAttribute('height')
    anh.nodeValue = h
    canvas.setAttributeNode(anw)
    canvas.setAttributeNode(anh)
    ctx.drawImage(image, 0, 0, w, h)
    var ext = image.src.substring(image.src.lastIndexOf('.') + 1).toLowerCase()// 图片格式
    var base64 = canvas.toDataURL('image/' + ext, quality)
    // 回调函数返回base64的值
    if (_this.imgArr.length <= 4) {
    _this.imgArr.unshift('')
    _this.imgArr.splice(0, 1, base64)// 替换数组数据的方法,此处不能使用:this.imgArr[index] = url;
    if (_this.imgArr.length >= 5) {
     _this.allowAddImg = false
    }
    }
   }
   }
   if (dd < files.length - 1) {
   dd++
   } else {
   clearInterval(timer)
   }
  }, 1000)
  }
 },
 deleteImg: function(index) {
  this.imgArr.splice(index, 1)
  if (this.imgArr.length < 5) {
  this.allowAddImg = true
  }
 }
 }
}
</script>

以上这篇vue 使用原生组件上传图片的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Tab页界面,用jQuery及Ajax技术实现
Sep 21 Javascript
JavaScript 比较时间大小的代码
Apr 24 Javascript
javascript下数值型比较难点说明
Jun 07 Javascript
jquery实现图片等比例缩放以及max-width在ie中不兼容解决
Mar 21 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
May 27 Javascript
jquery判断至少有一个checkbox被选中的方法
Jun 05 Javascript
JS组件系列之MVVM组件构建自己的Vue组件
Apr 28 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
May 20 jQuery
react router 4.0以上的路由应用详解
Sep 21 Javascript
JavaScript中七种流行的开源机器学习框架
Oct 11 Javascript
JS原型与继承操作示例
May 09 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
Jun 18 Javascript
使用js和canvas实现时钟效果
Sep 08 #Javascript
javascript使用canvas实现饼状图效果
Sep 08 #Javascript
vue配置多代理服务接口地址操作
Sep 08 #Javascript
全局安装 Vue cli3 和 继续使用 Vue-cli2.x操作
Sep 08 #Javascript
JS删除对象中某一属性案例详解
Sep 08 #Javascript
vue全局使用axios的操作
Sep 08 #Javascript
Vue自定义多选组件使用详解
Sep 08 #Javascript
You might like
用php实现的获取网页中的图片并保存到本地的代码
2010/01/05 PHP
PHP swfupload图片上传的实例代码
2013/09/30 PHP
php实现的漂亮分页方法
2014/04/17 PHP
主流PHP框架的优缺点对比分析
2014/12/25 PHP
PHP定时执行任务的3种方法详解
2015/12/21 PHP
PHP对称加密函数实现数据的加密解密
2016/10/27 PHP
Javascript 跨域访问解决方案
2009/02/14 Javascript
JavaScript RegExp方法获取地址栏参数(面向对象)
2009/03/10 Javascript
CCPry JS类库 代码
2009/10/30 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
jQuery鼠标经过方形图片切换成圆边效果代码分享
2015/08/20 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
jq给页面添加覆盖层遮罩的实例
2017/02/16 Javascript
js前端导出Excel的方法
2017/11/01 Javascript
微信小程序实现写入读取缓存详解
2019/08/30 Javascript
手把手带你入门微信小程序新框架Kbone的使用
2020/02/25 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
[01:02:45]完美世界DOTA2联赛 LBZS vs Forest 第三场 11.07
2020/11/09 DOTA
python实现无证书加密解密实例
2014/10/27 Python
python中enumerate函数用法实例分析
2015/05/20 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
Python 限制线程的最大数量的方法(Semaphore)
2019/02/22 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
python解释器安装教程的方法步骤
2020/07/02 Python
对CSS3选择器的研究(详解)
2016/09/16 HTML / CSS
HTML5中原生的右键菜单创建方法
2016/06/28 HTML / CSS
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
销售人员自我评价怎么写
2013/09/19 职场文书
小学教研工作制度
2014/01/15 职场文书
班主任对学生的评语
2014/04/26 职场文书
2014年政教处工作总结
2014/12/20 职场文书
语文教师求职信范文
2015/03/20 职场文书
医院志愿者活动总结
2015/05/06 职场文书
2015年城乡环境综合治理工作总结
2015/07/24 职场文书
采购员工作总结范文
2015/08/12 职场文书