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 相关文章推荐
简约JS日历控件 实例代码
Jul 12 Javascript
EasyUi datagrid 实现表格分页
Feb 10 Javascript
jscript读写二进制文件的方法
Apr 22 Javascript
jQuery实现鼠标点击弹出渐变层的方法
Jul 09 Javascript
jQuery获取多种input值的简单实现方法
Jun 20 Javascript
JS中使用DOM来控制HTML元素
Jul 31 Javascript
jQuery+CSS实现的table表格行列转置功能示例
Jan 08 jQuery
基于js Canvas实现二次贝塞尔曲线
Dec 25 Javascript
layui-table获得当前行的上/下一行数据的例子
Sep 24 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
Jun 08 Javascript
js实现页面导航层级指示效果
Aug 25 Javascript
如何vue使用el-table遍历循环表头和表体数据
Apr 26 Vue.js
使用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&amp;&amp;mysql)六
2006/10/09 PHP
php的数组与字符串的转换函数整理汇总
2013/07/18 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
JavaScript 特殊字符
2007/04/05 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
2015/09/14 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
jQuery插件扩展测试实例
2016/06/21 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
简单实现js拖拽效果
2017/07/25 Javascript
微信小程序上传图片实例
2018/05/28 Javascript
Vue 请求传公共参数的操作
2020/07/31 Javascript
vue-cli4使用全局less文件中的变量配置操作
2020/10/21 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
python实现颜色rgb和hex相互转换的函数
2015/03/19 Python
Python下的twisted框架入门指引
2015/04/15 Python
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
Python之list对应元素求和的方法
2018/06/28 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
Python随机生成身份证号码及校验功能
2018/12/04 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
python自动化测试之如何解析excel文件
2019/06/27 Python
python设置环境变量的作用整理
2020/02/17 Python
Python requests接口测试实现代码
2020/09/08 Python
pycharm配置QtDesigner的超详细方法
2021/01/25 Python
说出一些常用的类,包,接口
2014/09/22 面试题
万年牢教学反思
2014/02/15 职场文书
我们的节日清明节活动方案
2014/03/05 职场文书
洗手间标语
2014/06/23 职场文书
卖车协议书范例
2014/09/16 职场文书
带香烟到学校抽的检讨书
2014/09/25 职场文书
拖欠货款起诉状
2015/05/20 职场文书
解决Navicat for Mysql连接报错1251的问题(连接失败)
2021/05/27 MySQL