侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

微信(小程序)  /  管理员 发布于 5年前   530

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

1、实现效果

2、代码

Html:

添加图片

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实战教程》

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

您可能感兴趣的文章:

  • 使用Vue实现图片上传的三种方式
  • Vue axios 中提交表单数据(含上传文件)
  • vue实现文件上传功能
  • 基于VUE选择上传图片并页面显示(图片可删除)
  • vue.js 上传图片实例代码
  • Vue.js 2.0 移动端拍照压缩图片上传预览功能
  • vue中使用input[type="file"]实现文件上传功能
  • vue项目中使用axios上传图片等文件操作
  • Vue上传组件vue Simple Uploader的用法示例
  • vue使用axios实现文件上传进度的实时更新详解


  • 上一条:
    微信公众号点击菜单即可打开并登录微站的实现方法
    下一条:
    微信公众号用户与网站用户的绑定解决方案分析
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 微信模板消息改版后发送规则记录(微信订阅消息参数值内容限制说明)(1个评论)
    • 微信支付v3对接所需工具及命令(0个评论)
    • 2023年9月1日起:微信小程序必须备案才能上线运营(0个评论)
    • 腾讯官方客服回应了:微信好友上限约10000个!(1个评论)
    • 2023年做微信小程序的老铁注意:新增收费项、微信小程序获取手机号也收费了(2个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2017-10
    • 2018-01
    • 2020-03
    • 2021-06
    • 2021-10
    • 2022-03
    • 2023-02
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-10
    • 2023-11
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客