图片上传前预览、压缩、转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 ...
随机推荐
- [HDU2874]Connections between cities
思路:LCA裸题.本来是帮pechpo调错,结果自己写了半天… 设$dis_x$是点$x$到根结点距离,不难想到两点$u$.$v$之间最短距离等于$dis_u+dis_v-dis_{LCA(u,v)} ...
- R基础学习(二)-- 连接sqlserver
测试环境:win10+RStudio 三个步骤:(1)创建ODBC数据源:(2)install.packages('RODBC') :(3)编写连接测试脚本 (1)创建ODBC数据源 控制面板-> ...
- #pragma pack(n)的使用
在缺省情况下,编译器为了让程序跑得跟快,减少CPU读取数据的指令周期,对结构体的存储进行了优化, 比如:如下结构体 struct s { char ch; int i; }; 虽然变量ch本身只有1个 ...
- html5 js实现浏览器全屏
全屏 var docElm = document.documentElement; //W3C if (docElm.requestFullscreen) { docElm.requestFullsc ...
- layer.confirm 询问框 的层遮盖
function admin_del(obj) { layer.confirm('确认要重启吗?', { btn : [ '确定', '取消' ]//按钮 }, function(index) { l ...
- [Go] 判断 文件/文件夹 是否存在?
Golang 判断文件是否存在有点怪异,是根据在操作文件时返回的错误信息来判断的,而不能直接根据路径判断 版本1: func IsExists(path string) (bool, error) { ...
- JVM Internals
http://blog.jamesdbloom.com/JVMInternals.html http://blog.csdn.net/column/details/talk-about-jvm.htm ...
- iOS十进制切割格式转换
//@"123456789" 转换后 @"123,456,789" @interface NSString (num) - (NSString *)money; ...
- TF400511: Your team has not defined any iterations to use as sprints
tfs里面的冲刺对于开发团队来说, 是非常重要的一个功能,是团队开发进度的晴雨表: 但是如果从此死活出不来,怎么办呢? TF400511:您的团队尚未定义任何要用作冲刺 (sprint) 的迭代 TF ...
- 警告 7 隐藏了继承的成员。如果是有意隐藏,请使用关键字 new
public new bool Print(string 承包方编码, MapPrint.My2Progress pMy2Progress, bool Label2ZJ)