Vue移动端实现图片上传及超过1M压缩上传
本文实例为大家分享了Vue移动端实现图片上传及超过1M压缩上传的具体代码,供大家参考,具体内容如下
1、实现效果
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) }) },
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
上一篇:JS实现图片切换特效
栏 目:JavaScript
下一篇:node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
本文地址:https://www.xiuzhanwang.com/a1/JavaScript/9411.html
您可能感兴趣的文章
- 04-02javascript遮盖,JavaScript遮盖PC端页面
- 04-02java后端代码分页 java后端实现分页page
- 01-10在Vue项目中使用Typescript的实现
- 01-10Vue中使用Lodop插件实现打印功能的简单方法
- 01-10Vue filter 过滤当前时间 实现实时更新效果
- 01-10Vuex实现数据共享的方法
- 01-10JS实现水平移动与垂直移动动画
- 01-10Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
- 01-10vue中根据时间戳判断对应的时间(今天 昨天 前天)
- 01-10Vue+Node实现的商城用户管理功能示例
阅读排行
本栏相关
- 04-02javascript点线,点线的代码
- 04-02javascript潜力,javascript强大吗
- 04-02javascript替换字符串,js字符串的替换
- 04-02javascript移出,js 移入移出
- 04-02包含javascript舍的词条
- 04-02javascript并行,深入理解并行编程 豆瓣
- 04-02javascript匿名,js匿名方法
- 04-02javascript警报,JavaScript警告
- 04-02javascript遮盖,JavaScript遮盖PC端页面
- 04-02javascript前身,javascript的前身
随机阅读
- 01-10SublimeText编译C开发环境设置
- 01-11ajax实现页面的局部加载
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 04-02jquery与jsp,用jquery
- 01-10C#中split用法实例总结
- 01-10delphi制作wav文件的方法
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 08-05DEDE织梦data目录下的sessions文件夹有什