vue里图片压缩上传组件
//单图上传
<template>
<div>
<div class="uploader" v-if='!dwimg'>
<van-uploader :after-read="ondwRead" accept="image/gif, image/jpeg" multiple>
<van-icon name="photograph" />
</van-uploader>
</div>
<p v-if="dwimg" class="img"><img id="img" :src="dwimg" alt="" @click='yltp(dwimg)'><b @click='htp'><van-icon name="close" /></b></p> </div>
</template>
<script>
import axios from 'axios'
import { Toast } from 'vant';
import { ImagePreview } from 'vant';
import hbsp from '@/components/rwlctbcons/hbsp'
var instance = axios.create({
headers: {'Content-Type': 'multipart/form-data'}
});
export default {
name:'hbsp',
data(){
return{
imgmurl:'',
dwimg:'',
}
},
methods:{
//传值给父组件 父组件监听v-on:dantuEvent='function()'用function接收
childhbdbimg(){
console.log('1111');
this.$emit('dantuEvent',this.dwimg)
},
//删除
htp(){
this.dwimg='';
},
//预览图片
yltp(dwimg){
ImagePreview([
dwimg
]);
},
ondwRead(file){
Toast.loading({
duration: 0,
mask: true,
forbidClick: false,
message: '上传中...'
});
//console.log(file.content);
console.log(file);//未压缩的file
let img = new Image();
img.src = file.content;
this.dwimg=file.content;
let that=this;
img.onload=function(){
that.ontpys(img);
}
//上传成功的图片
function fn(){
setTimeout(() => {
if(that.imgmurl){
that.dwimg= that.imgmurl;
console.log(that.dwimg);
that.imgmurl='';
that.childhbdbimg();
Toast.clear();
}else{
fn();
}
}, 1000);
};
fn();
}, //压缩图片的方法
ontpys(img){
let originWidth = img.width, // 压缩后的宽
originHeight=img.height,
maxWidth = 400, maxHeight = 400,
quality = 0.8, // 压缩质量
canvas = document.createElement('canvas'),
drawer = canvas.getContext("2d");
canvas.width = maxWidth;
canvas.height = originHeight/originWidth*maxWidth;
drawer.drawImage(img, 0, 0, canvas.width, canvas.height);
let base64 = canvas.toDataURL("image/jpeg", quality); // 压缩后的base64图片
let file = this.dataURLtoFile(base64,Date.parse(Date())+'.jpg');
file={content:base64,file:file};
console.log(file);//压缩后的file
this.onimg(file);
},
//base64转file
dataURLtoFile(dataurl,filename){
let arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr],filename,{type:mime});
},
//图片上传
onimg(file){
//console.log(file.content)
var formData = new FormData();
formData.append("file", file.file);
instance({
url:'/api/img/upload',
method:'post',
headers: {
'token': sessionStorage.token
},
data:formData
})
.then(response=>{
console.log(response)
this.imgmurl=response.data.url;
})
.catch(error=>{
console.log(error)
})
}, }
}
</script>
<style scoped>
.rwlctb_div{
padding: 10px 20px;
line-height: 26px;
} .tb_rwt span{
display: inline-block;
width: 100%;
}
.tb_rwt{
padding: 10px 20px;
}
.tb_rwt span{
display: inline-block;
width: 100%;
}
.tb_title{
text-align: center
}
.van-panel{
margin-top: 10px;
}
.van-row{
text-align: center
}
.van-uploader{
width:1.4rem;
border:1px solid #999;
text-align: center;
height: 1.4rem;
line-height: 1.4rem;
}
.img{
width:1.4rem;
border:1px solid #999;
text-align: center;
height: 1.4rem;
line-height: 1.4rem;
overflow: hidden;
position: relative;
}
.img img{
width: 100%;
}
.img i{
position: absolute;
top: 1px;
right: 1px;
z-index: 11;
}
</style>
vue里图片压缩上传组件的更多相关文章
- vue Base64图片压缩上传OSS
this.compress(result, 800, 0.5).then(val => { //得到压缩图片 let data = val; that.file = that.dataURLto ...
- 基于vue + axios + lrz.js 微信端图片压缩上传
业务场景 微信端项目是基于Vux + Axios构建的,关于图片上传的业务场景有以下几点需求: 1.单张图片上传(如个人头像,实名认证等业务) 2.多张图片上传(如某类工单记录) 3.上传图片时期望能 ...
- 三款不错的图片压缩上传插件(webuploader+localResizeIMG4+LUploader)
涉及到网页图片的交互,少不了图片的压缩上传,相关的插件有很多,相信大家都有用过,这里我就推荐三款,至于好处就仁者见仁喽: 1.名气最高的WebUploader,由Baidu FEX 团队开发,以H5为 ...
- Html5+asp.net mvc 图片压缩上传
在做图片上传时,大图片如果没有压缩直接上传时间会非常长,因为有的图片太大,传到服务器上再压缩太慢了,而且损耗流量. 思路是将图片抽样显示在canvas上,然后用通过canvas.toDataURL方法 ...
- 纯原生js移动端图片压缩上传插件
前段时间,同事又来咨询一个问题了,说手机端动不动拍照就好几M高清大图,上传服务器太慢,问问我有没有可以压缩图片并上传的js插件,当然手头上没有,别慌,我去网上搜一搜. 结果呢,呵呵...诶~又全是基于 ...
- springMVC多图片压缩上传的实现
首先需要在配置文件中添加配置: <!--配置文件的视图解析器,用于文件上传,其中ID是固定的:multipartResolver--> <bean id="multipar ...
- 基于H5+ API手机相册图片压缩上传
// 母函数 function App(){} /** * 图片压缩,默认同比例压缩 * @param {Object} path * pc端传入的路径可以为相对路径,但是在移动端上必须传入的路径是照 ...
- 分享图片压缩上传demo,可以选择一张或多张图片也可以拍摄照片
2016-08-05更新: 下方的代码是比较OLD的了,是通过js进行图片的剪切 旋转 再生成,效率较低. 后来又整合了一个利用native.js本地接口的压缩代码 ,链接在这 .页面中有详细的说明, ...
- js 图片压缩上传(base64位)以及上传类型分类
一.input file上传类型 1.指明只需要图片 <input type="file" accept='image/*'> 2.指明需要多张图片 <input ...
随机推荐
- golang和python的二进制转换
1.二进制转换规则 比如13,对13整除2,余数1,整除变为6,依次类推 13/2=6余1 6/2=3余0 3/2=1余1 1/2=0余1 所以最后的结果为1101 2.python def conv ...
- SSM项目实现连接两个mysql数据库
最近做项目需要用到另一个数据库的内容,多方查找终于实现了功能. 我们都知道,在SSM框架中,我们在applicationContext.xml配置文件中添加数据源就可以实现数据库增删改查,但是只能连接 ...
- 深入浅出 Java Concurrency (27): 并发容器 part 12 线程安全的List/Set[转]
本小节是<并发容器>的最后一部分,这一个小节描述的是针对List/Set接口的一个线程版本. 在<并发队列与Queue简介>中介绍了并发容器的一个概括,主要描述的是Queue的 ...
- SpringCloud学习笔记(四):Eureka服务注册与发现、构建步骤、集群配置、Eureka与Zookeeper的比较
简介 Netflix在设计Eureka时遵守的就是AP原则 拓展: 在分布式数据库中的CAP原理 CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性). Availab ...
- jquery 判断当前设备是PC端还是移动端
$(function(){ var system = { win: false, mac: false, xll: false, ipad:false }; //检测平台 var p = naviga ...
- Redis学习笔记01-分布式锁
1.分布式锁的定义与理解 在并发任务中,当对数据执行修改和删除时为了防止多个任务同时拿到数据而产生的混乱,这时就要用到分布式锁来限制程序的并发执行. Redis分布式锁本质上要实现的目标就是在Redi ...
- mariadb ROW格式复制下从库结构变更引发1677错误
stop slave;set global slave_type_conversions=ALL_LOSSY;start slave; 详细度娘slave_type_conversions的参数说明
- C开发系列-预处理指令
简介 OC程序执行过程,在源代码编译成0跟1的二进制文件之前.执行的指令称之为预处理指令. 所有的预处理指令都是以#开头.#import也是预处理指令.预处理指令主要分为三种 宏定义 条件编译 文件包 ...
- iOS开发系列-SQLite
概述 SQLite3是一款轻型的嵌入式数据库.它占用资源非常低,在嵌入式设备中,可能只需要几百K的内存就够了.它的处理速度比Mysql.PostgreSQL这两款著名的数据库速度还快. 数据库简介 常 ...
- Linux常用命令的缩写含义
命令缩写: ls:list(列出目录内容) cd:Change Directory(改变目录) su:switch user 切换用户rpm:redhat package manager 红帽子打包管 ...