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 实现双色表格实现代码
Nov 24 Javascript
JQuery Study Notes 学习笔记(一)
Aug 04 Javascript
JS target与currentTarget区别说明
Aug 28 Javascript
javascript框架设计读书笔记之模块加载系统
Dec 02 Javascript
使用RequireJS优化JavaScript引用代码的方法
Jul 01 Javascript
js正则表达式验证邮件地址
Nov 12 Javascript
JS从一组数据中找到指定的单条数据的方法
Jun 02 Javascript
js中获取时间new Date()的全面介绍
Jun 20 Javascript
JavaScript基本语法_动力节点Java学院整理
Jun 26 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
Nov 25 Javascript
详解基于Wepy开发小程序插件(推荐)
Aug 01 Javascript
vscode中Vue别名路径提示的实现
Jul 31 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下10件你也许并不了解的事情
2008/09/11 PHP
php中json_decode()和json_encode()的使用方法
2012/06/04 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
2016/03/07 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
php分享朋友圈的实现代码
2019/02/18 PHP
javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码
2009/11/28 Javascript
window.location.hash 属性使用说明
2010/03/20 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
JQuery教学之性能优化
2014/05/14 Javascript
封装了一个支持匿名函数的Javascript事件监听器
2014/06/05 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
JavaScript对Json的增删改属性详解
2016/06/02 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
2016/08/06 Javascript
详解angular中通过$location获取路径(参数)的写法
2017/03/21 Javascript
微信小程序实现topBar底部选择栏效果
2018/07/20 Javascript
this在vue和小程序中的使用详解
2019/01/28 Javascript
Vue插件从封装到发布的完整步骤记录
2019/02/28 Javascript
ES6中字符串的使用方法扩展
2019/06/04 Javascript
Python中字符串的格式化方法小结
2016/05/03 Python
CentOS7.3编译安装Python3.6.2的方法
2018/01/22 Python
对python中if语句的真假判断实例详解
2019/02/18 Python
Django基础知识 web框架的本质详解
2019/07/18 Python
python科学计算之narray对象用法
2019/11/25 Python
利用CSS3的transition属性实现滑动效果
2015/08/05 HTML / CSS
美国内衣品牌:Leonisa
2016/08/14 全球购物
西班牙第一的网上药房:PromoFarma.com
2017/04/17 全球购物
英国绿色商店:Natural Collection
2019/05/03 全球购物
《高尔基和他的儿子》教学反思
2014/04/09 职场文书
科长竞争上岗演讲稿
2014/05/12 职场文书
自强自立美德少年事迹材料
2014/08/16 职场文书
2014年城市管理工作总结
2014/12/02 职场文书
营销计划书范文
2015/01/17 职场文书
2015年房产销售工作总结范文
2015/05/22 职场文书
2015中学教师个人工作总结
2015/07/22 职场文书
敬老院活动感想
2015/08/07 职场文书
寒假致家长的一封信
2015/10/10 职场文书