Vue移动端实现图片上传及超过1M压缩上传


Posted in Javascript onDecember 23, 2019

本文实例为大家分享了Vue移动端实现图片上传及超过1M压缩上传的具体代码,供大家参考,具体内容如下

1、实现效果

Vue移动端实现图片上传及超过1M压缩上传

2、代码

Html:

<div class="choosePic">
  <div class="pics" :style="{backgroundImage: 'url(' + form.erpRecords + ')'}">
   <input type="file" class="uploads" @change="uploadserpRecords" accept="image/*" multiple >
   <img src="../../assets/home/ic_AddImage@3x.png" alt="" v-if="form.erpRecords == ''">
   <div v-if="form.erpRecords == ''">添加图片</div>
  </div>
</div>

Css:使用了less ,需要引入less,才能使用(npm install less less-loader --save)

.choosePic{
  margin: 0.64rem 0;
  .pics{
  background-position: center;
  background-size: cover;
  width: 15.1467rem;
  height: 5.5467rem;
  background-color: #F9F9F9;
  border: 2px solid #C3C3C3;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 1rem;
  color: #3DCA9A;
  font-weight: bold;
  border-radius: 0.213rem;
  >div{
   margin-left: 0.213rem;
   letter-spacing: 2px
  }
  .uploads{
   position: absolute;
   z-index: 99;
   left: 0;
   width: 99%;
   height: 5.5467rem;
   opacity: 0;
  }
  img{
   width: 1.4933rem;
   height: 1.4933rem;
  }

  }
 }

JS:

/**
 * 上传销售记录
 */
uploadserpRecords (e) {
 let file = e.target.files[0]
 if (file === undefined) {
 return
 }
 if (file.size / 1024 > 1025) { // 文件大于1M(根据需求更改),进行压缩上传
 that.photoCompress(file, { // 调用压缩图片方法
  quality: 0.2
 }, function (base64Codes) {
  // console.log("压缩后:" + base.length / 1024 + " " + base);
  let bl = that.base64UrlToBlob(base64Codes)
  // file.append('file', bl, 'file_' + Date.parse(new Date()) + '.jpg') // 文件对象
  that.uploadLice(bl) // 请求图片上传接口
 })
 } else { // 小于等于1M 原图上传
 this.uploadLice(file)
 }
}, 
/**
 * base64 转 Blob 格式 和file格式
 */
base64UrlToBlob (urlData) {
 let arr = urlData.split(','),
 mime = arr[0].match(/:(.*?);/)[1], // 去掉url的头,并转化为byte
 bstr = atob(arr[1]), // 处理异常,将ascii码小于0的转换为大于0
 n = bstr.length,
 u8arr = new Uint8Array(n)
 while (n--) {
 u8arr[n] = bstr.charCodeAt(n)
 }
 // 转blob
 // return new Blob([u8arr], {type: mime})
 let filename = Date.parse(new Date()) + '.jpg'
 // 转file
 return new File([u8arr], filename, {type: mime})
},
 /*
 压缩图片
 file:文件(类型是图片格式),
 obj:文件压缩后对象width, height, quality(0-1)
 callback:容器或者回调函数
*/
photoCompress (file, obj, callback) {
 let that = this
 let ready = new FileReader()
 /* 开始读取指定File对象中的内容. 读取操作完成时,返回一个URL格式的字符串. */
 ready.readAsDataURL(file)
 ready.onload = function () {
 let re = this.result
 that.canvasDataURL(re, obj, callback) // 开始压缩
 }
},
/* 利用canvas数据化图片进行压缩 */
/* 图片转base64 */
canvasDataURL (path, obj, callback) {
 let img = new Image()
 img.src = path
 img.onload = function () {
 let that = this // 指到img
 // 默认按比例压缩
 let w = that.width,
  h = that.height,
  scale = w / h
 w = obj.width || w
 h = obj.height || (w / scale)
 let quality = 0.2 // 默认图片质量为0.7
 // 生成canvas
 let canvas = document.createElement('canvas')
 let ctx = canvas.getContext('2d')
 // 创建属性节点
 let anw = document.createAttribute('width')
 anw.nodeValue = w
 let anh = document.createAttribute('height')
 anh.nodeValue = h
 canvas.setAttributeNode(anw)
 canvas.setAttributeNode(anh)
 ctx.drawImage(that, 0, 0, w, h)
 // 图像质量
 if (obj.quality && obj.quality >= 1 && obj.quality < 0) {
  quality = obj.quality
 }
 // quality值越小,所绘制出的图像越模糊
 let base64 = canvas.toDataURL('image/jpeg', quality)
 // 回调函数返回base64的值
 callback(base64)
 }
},
// 返回file文件,调用接口执行上传
uploadLice (file) {
 console.log(file)
 uploadLog(file, (data) => {
 this.form.operatingLicense = data
 console.log(data)
 })
},

关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

更多vue学习教程请阅读专题《vue实战教程》

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Js callBack 返回前一页的js方法
Nov 30 Javascript
浅析ajax请求json数据并用js解析(示例分析)
Jul 13 Javascript
Node.js实现在目录中查找某个字符串及所在文件
Sep 03 Javascript
javascript简单实现滑动菜单效果的方法
Jul 27 Javascript
基于JavaScript实现弹出框效果
Feb 19 Javascript
Centos7 中 Node.js安装简单方法
Nov 02 Javascript
微信小程序加载更多 点击查看更多
Nov 29 Javascript
原生JS京东轮播图代码
Mar 22 Javascript
jQuery实现的淡入淡出图片轮播效果示例
Aug 29 jQuery
Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
Apr 22 Javascript
javascript中call,apply,callee,caller用法实例分析
Jul 24 Javascript
layui.use模块外部使用其内部定义的js封装函数方法
Sep 16 Javascript
vue图片上传组件使用详解
Dec 23 #Javascript
微信小程序实现签字功能
Dec 23 #Javascript
使用JS location实现搜索框历史记录功能
Dec 23 #Javascript
vue实现移动端图片上传功能
Dec 23 #Javascript
vue实现拖拽效果
Dec 23 #Javascript
JQuery常用选择器功能与用法实例分析
Dec 23 #jQuery
Jquery属性的获取/设置及样式添加/删除操作技巧分析
Dec 23 #jQuery
You might like
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
菜鸟javascript基础资料整理3 正则
2010/12/06 Javascript
检测jQuery.js是否已加载的判断代码
2011/05/20 Javascript
asp.net 30分钟掌握无刷新 Repeater
2011/09/16 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
jquery datepicker参数介绍和示例
2014/04/15 Javascript
javascript删除元素节点removeChild()用法实例
2015/05/26 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
apply和call方法定义及apply和call方法的区别
2015/11/15 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法
2016/07/27 Javascript
JavaScript里 ==与===区别详解
2016/08/16 Javascript
jQGrid Table操作列中点击【操作】按钮弹出按钮层的实现代码
2016/12/05 Javascript
微信小程序 swiper制作tab切换实现附源码
2017/01/21 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
详解React native全局变量的使用(跨组件的通信)
2017/09/07 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
vue中倒计时组件的实例代码
2018/07/06 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
2020/04/13 Javascript
Python开发编码规范
2006/09/08 Python
flask中主动抛出异常及统一异常处理代码示例
2018/01/18 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
对python 调用类属性的方法详解
2019/07/02 Python
python中_del_还原数据的方法
2020/12/09 Python
StubHub墨西哥:购买和出售您的门票
2016/09/17 全球购物
设计师珠宝:Ylang 23
2018/05/11 全球购物
享受加州生活方式的时尚舒适:XCVI
2018/07/09 全球购物
德国婴儿服装和婴儿用品购买网站:Baby Sweets
2019/12/08 全球购物
Yahoo的PHP面试题
2014/05/26 面试题
物业保安员岗位职责制度
2014/01/30 职场文书
拾金不昧表扬稿大全
2015/05/05 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书
Redis缓存-序列化对象存储乱码问题的解决
2021/06/21 Redis
linux下安装redis图文详细步骤
2021/12/04 Redis