图片上传前预览、压缩、转blob、转formData等操作
直接上代码吧:
<template>
<div>
<div class="header">添加淘宝买号</div>
<div class="tips">
<p class="font16">注意事项</p>
<p class="font14">买号采用人工审核,提交后0.5个工作日内完成审核,请耐心等待,新手务必认真准确填写。</p>
</div>
<el-form ref="taobao" :model="taobaoInfo" label-width="100px" class="miForm">
<el-form-item label="淘宝买号">
<el-input v-model="taobaoInfo.name" placeholder="请输入淘宝的会员名"></el-input>
</el-form-item>
<el-form-item label="买号等级">
<el-select v-model="taobaoInfo.level" placeholder="请选择买号星级">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-form>
<div class="upload">
<img v-if="src" :src="src" alt="user image" height="100%" width="100%">
<input type="file" @change="uploadIMG" ref="file" id="file">
<label for="file"><i class="el-icon-plus"></i></label>
<div class="del"><i class="el-icon-error" @click="delImg"></i></div>
</div>
</div>
</template>
<script type="ecmascript-6">
export default {
name:'taobao',
data(){
return {
taobaoInfo:{},
options:[
{label:'一心',value:},
{label:'二心',value:},
{label:'三心',value:},
{label:'四心',value:},
{label:'五心',value:},
{label:'一钻',value:},
{label:'二钻',value:},
{label:'三钻',value:},
{label:'四钻',value:},
{label:'五钻',value:}
],
src: ''// 转base64码后的data字段
}
},
methods:{
getFile (file) {
let _this = this
if (!file || !window.FileReader) return // 看支持不支持FileReader
if (/^image/.test(file.type)) {
//创建一个reader
let reader = new FileReader()
reader.readAsDataURL(file) // 这里是最关键的一步,转换就在这里
reader.onloadend = function () {
_this.src = this.result let result = this.result;
let img = new Image();
img.src = result;
console.log("未压缩前的图片大小:" + result.length);
img.onload = function() {
let data = _this.compress(img); let blob = _this.dataURItoBlob(data);
console.log("base64转blob对象:" + blob);
var formData = new FormData();
formData.append("file", blob);
console.log("将blob对象转成formData对象:" + formData.get("file")); let config = {
headers: { "Content-Type": "multipart/form-data" }
};
// 发送请求;
_this.axios.post(_this.uploadUrl.url, formData, config).then(res => {
if (res.data.code == ) {
_this.$emit( "getImgsrc", res.data.data.resultftphost, res.data.data.resulturl );
} else {
_this.$message({
message: "图片上传失败,请重试",
type: "warning"
});
}
});
}
}
}
},
uploadIMG(e) {
let files = e.target.files || e.dataTransfer.files;
if (!files.length) return;
this.picavalue = files[];
console.log("图片大小:" + this.picavalue.size / + "kb");
if (this.picavalue.size / > ) {
this.$message({
message: "图片过大不支持上传",
type: "warning"
});
} else {
this.getFile(this.picavalue);
}
},
// 压缩图片
compress(img) {
let canvas = document.createElement("canvas");
let ctx = canvas.getContext("2d");
let initSize = img.src.length;
let width = img.width;
let height = img.height;
canvas.width = width;
canvas.height = height;
// 铺底色
ctx.fillStyle = "#fff";
ctx.fillRect(, , canvas.width, canvas.height);
ctx.drawImage(img, , , width, height);
//进行最小压缩
let ndata = canvas.toDataURL("image/jpeg", 0.1);
console.log("压缩后的图片大小:" + ndata.length);
console.log("压缩后的图片内容:" + ndata)
return ndata;
},
// base64转成bolb对象
dataURItoBlob(base64Data) {
var byteString;
if (base64Data.split(",")[].indexOf("base64") >= )
byteString = atob(base64Data.split(",")[]);
else
byteString = unescape(base64Data.split(",")[]);
var mimeString = base64Data .split(",")[] .split(":")[] .split(";")[];
var ia = new Uint8Array(byteString.length);
for (var i = ; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ia], { type: mimeString });
},
//删除事件
delImg() {
this.src = null;
}
}
}
</script>
<style scoped lang="stylus" rel="stylesheet">
@import '../../assets/stylus/index.styl'
.tips{
padding 10px
line-height .5em
}
.el-form-item{
margin-bottom 18px
background-color #fff
}
.miForm /deep/ input{
border none
} .upload {
margin-left 20px
width 150px
height 150px
border:2px solid #ddd;
border-radius: 2px;
text-align: center;
overflow:hidden
position:relative;
label{
line-height 150px
font-size: 30px;
}
.del{
position:absolute;
right:;
top:;
color:red;
}
}
input[type='file'] {
display: none;
}
</style>
图片上传前预览、压缩、转blob、转formData等操作的更多相关文章
- input file实现多选,限制文件上传类型,图片上传前预览功能
限制上传类型 & 多选:① accept 属性只能与 <input type="file" /> 配合使用.它规定能够通过文件上传进行提交的文件类型. ② mu ...
- html之file标签 --- 图片上传前预览 -- FileReader
记得以前做网站时,曾经需要实现一个图片上传到服务器前,先预览的功能.当时用html的<input type="file"/>标签一直实现不了,最后舍弃了这个标签,使用了 ...
- ASP.NET MVC图片上传前预览
回老家过春节,大半个月,在家的日子里,吃好睡好,人也长了3.5Kg.没有电脑,没有网络,无需写代码,工作上相关的完全放下......开心与父母妻儿过个年,那样的生活令Insus.NET现在还在留恋.. ...
- file标签 - 图片上传前预览 - FileReader & 网络图片转base64和文件流
记得以前做网站时,曾经需要实现一个图片上传到服务器前,先预览的功能.当时用html的<input type="file"/>标签一直实现不了,最后舍弃了这个标签,使用了 ...
- 【转】html之file标签 --- 图片上传前预览 -- FileReader
记得以前做网站时,曾经需要实现一个图片上传到服务器前,先预览的功能.当时用html的<input type="file"/>标签一直实现不了,最后舍弃了这个标签,使用了 ...
- 【转】HTML5 jQuery图片上传前预览
hTML5实现表单内的上传文件框,上传前预览图片,针刷新预览images,本例子主要是使用HTML5 的File API,建立一個可存取到该 file的url,一个空的img标签,ID为img0,把选 ...
- HTML5 jQuery图片上传前预览
hTML5实现表单内的上传文件框,上传前预览图片,针刷新预览images,本例子主要是使用HTML5 的File API,建立一個可存取到该file的url,一个空的img标签,ID为img0,把选择 ...
- HTML5 FileReader实现图片上传前预览
如果你的浏览器支持Html5的FileReader的话,实现图片上传前进行预览是一件非常容易之事情. 在控制器,创建一个视图Action: jQuery代码: 实时演示一下: 下面内容于2014-11 ...
- jq 图片上传前预览
html: <div class="form_upload"> <input type="file" id="uploadImg&q ...
随机推荐
- 模板 图的遍历 bfs+dfs 图的最短路径 Floyed+Dijkstra
广搜 bfs //bfs #include<iostream> #include<cstdio> using namespace std; ],top=,end=; ][]; ...
- 【优先队列+贪心】BZOJ1826-[JSOI2010]缓存交换
……啊开始颓了. [题目大意] 已知当前集合最大容量为m,n个询问.每次询问一个元素,如果集合中没有则需要加入该元素,如果集合已经满了则需要先删去集合中的某些元素再加入.问至少要加入几次元素? [思路 ...
- 【BZOJ-2864】战火星空 计算几何 + 最大流
2864: 战火星空 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 33 Solved: 14[Submit][Status][Discuss] D ...
- 简单的抖动运动 主要利用offset left 和 setTimeout
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 两个div如何并列 (转)
两个div如何并列?当用到div+css代替table时,我习惯用两个方法: 1 <div id="parent"> <div id="child_1& ...
- Android 9 patch 图片 (.9.png 格式图片) 的特点和制作(转)
本文围绕 .9.png 格式图片讨论以下两个话题: 1. 该格式图片的特点 2. 制作方式 一 .9.png 格式的文件的特点 与传统的png 格式图片相比, 9.png 格式图片在图片四周有一圈一个 ...
- POJ 1741 Tree (树分治入门)
Tree Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8554 Accepted: 2545 Description ...
- Jack--10天学会IOS大纲;注意将图片放大观看!
第一天:磨刀霍霍期 耐得住性子好好熟悉和认识开发环境 ---------Jack/版权全部 认识开发环境 操作系统认识 Mac系统是苹果机专用系统.是基 ...
- C++ classes and uniform initialization
// classes and uniform initialization #include <iostream> using namespace std; class Circle ...
- CentOS 6.8 安装 Python3
由于没有GCC无法编译安装Python3.6, 所以先安装GCC(yum install gcc) 下载地址:https://www.python.org/ftp/python/ 1 tar zxvf ...