直接上代码吧:

<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等操作的更多相关文章

  1. input file实现多选,限制文件上传类型,图片上传前预览功能

    限制上传类型 & 多选:① accept 属性只能与 <input type="file" /> 配合使用.它规定能够通过文件上传进行提交的文件类型. ② mu ...

  2. html之file标签 --- 图片上传前预览 -- FileReader

    记得以前做网站时,曾经需要实现一个图片上传到服务器前,先预览的功能.当时用html的<input type="file"/>标签一直实现不了,最后舍弃了这个标签,使用了 ...

  3. ASP.NET MVC图片上传前预览

    回老家过春节,大半个月,在家的日子里,吃好睡好,人也长了3.5Kg.没有电脑,没有网络,无需写代码,工作上相关的完全放下......开心与父母妻儿过个年,那样的生活令Insus.NET现在还在留恋.. ...

  4. file标签 - 图片上传前预览 - FileReader & 网络图片转base64和文件流

    记得以前做网站时,曾经需要实现一个图片上传到服务器前,先预览的功能.当时用html的<input type="file"/>标签一直实现不了,最后舍弃了这个标签,使用了 ...

  5. 【转】html之file标签 --- 图片上传前预览 -- FileReader

    记得以前做网站时,曾经需要实现一个图片上传到服务器前,先预览的功能.当时用html的<input type="file"/>标签一直实现不了,最后舍弃了这个标签,使用了 ...

  6. 【转】HTML5 jQuery图片上传前预览

    hTML5实现表单内的上传文件框,上传前预览图片,针刷新预览images,本例子主要是使用HTML5 的File API,建立一個可存取到该 file的url,一个空的img标签,ID为img0,把选 ...

  7. HTML5 jQuery图片上传前预览

    hTML5实现表单内的上传文件框,上传前预览图片,针刷新预览images,本例子主要是使用HTML5 的File API,建立一個可存取到该file的url,一个空的img标签,ID为img0,把选择 ...

  8. HTML5 FileReader实现图片上传前预览

    如果你的浏览器支持Html5的FileReader的话,实现图片上传前进行预览是一件非常容易之事情. 在控制器,创建一个视图Action: jQuery代码: 实时演示一下: 下面内容于2014-11 ...

  9. jq 图片上传前预览

    html: <div class="form_upload"> <input type="file" id="uploadImg&q ...

随机推荐

  1. codevs 2804 最大最小数质因数

    题目描述 Description 先输入n,n<=20;再依次输入n个不同的数,每个数<=1000000;找出最大数和最小数,并输出最大最小数的质因数,没有质因数则输出0. 输入描述 In ...

  2. 折腾一天安装Centos7,以及后面恢复Win7引导的曲折历程

    一.下载centos 7 livecd iso 访问镜像网站,http://mirrors.aliyun.com/centos/7.0.1406/isos/x86_64/ 或者直接下载:http:// ...

  3. 如何处理C++构造函数中的错误——兼谈不同语言的错误处理

    用C++写代码的时候总是避免不了处理错误,一般来说有两种方式,通过函数的返回值或者抛出异常.C语言的错误处理一律是通过函数的返回值来判断的,一般是返回0.NULL或者-1表示错误,或者直接返回错误代码 ...

  4. Codeforces Round #396 (Div. 2) B. Mahmoud and a Triangle 贪心

    B. Mahmoud and a Triangle 题目连接: http://codeforces.com/contest/766/problem/B Description Mahmoud has ...

  5. WorldFinal11 (2/11)

    WorldFinal 11 Trash Removal 题意 给你一个多边形,问这个多边形至少需要多宽的长度,才能把这个多边形放进去. 数据范围100 题解 数据范围只有100,暴力枚举两点,然后算最 ...

  6. VS2013发布网站删除.CS文件

    VS2013发布网站时,默认不删除.CS文件,想要删除的话,需要一些配置   1.在要发布的网站上右键,选择"发布网站". 2.在发布窗口中,会让你选择一个发布配置文件,没有的话点 ...

  7. Eclipse 正则表达式 查找与替换

    CTRL + space in the textboxes gives you all kinds of suggestions for regular expression writing. 查找 ...

  8. how convert large HEX string to binary array ?

    how convert large HEX string to binary I have a string with 14 characters . This is a hex represanta ...

  9. 防止shell脚本长时间执行导致ssh超时

    在一些对安全性要求较高的场景下.ssh的超时时间是管理员预先设置好的,在闲置一段时间后ssh连接会自己主动断开. 这样的情况下假设通过ssh运行脚本,而脚本运行时间又比較长的话.会导致sshclien ...

  10. WebService使用实例

    近期刚刚開始学习使用WebService的方法进行server端数据交互,发现网上的资料不是非常全, 眼下就结合收集到的一些资料做了一个小样例和大家分享一下~ 我们在PC机器javaclient中.须 ...