图片上传前预览、压缩、转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 ...
随机推荐
- DrawFrameControl 绘制标准控件
BOOL DrawFrameControl( HDC hDC, // 设备环境句柄 LPRECT lpRect, // 矩形区域 UINT nType, // 控件 ...
- MikroTik RouterOS安装到SATA硬盘
其实这个问题再5.x以上的版本就已经不存在这个问题,基本现在的版本都支持SATA,如果不支持,估计用的是2.x版本的,那么只需要设置成混合模式(百度)即可.
- hdu1465(放错信 错排公式)
Problem Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好“一件”事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就像花钱总是比挣钱容易 ...
- Continuous Integration for iOS Apps with Visual Studio Team Services
原文引用自:https://blog.xamarin.com/continuous-integration-for-ios-apps-with-visual-studio-team-services/ ...
- WIN8系统中 任务管理器 性能栏 显示CPU利用率(已暂停)怎么回事?
解决办法: 点上方的 查看--更新速度--普通
- 总结ASP.NET MVC视图页使用jQuery传递异步数据的几种方式
在ASP.NET MVC的视图页向控制器传递异步数据,可能是数组,JavaScript对象,json,表单数据,等等. 关于数据,JavaScript对象有时候和json长得一模一样,有么有? var ...
- C#编程(三十一)----------泛型总结
C#泛型总结 C#中的所谓的泛型程序设计和C++中相应的模版类似. 泛型方法 C#中的泛型方法是指使用了类型参数的方法成员,案例: static void Main(string[] args) { ...
- java使用反射强制给private字段赋值
今天项目中遇到了一个问题,要调用一个类,并获取这个类的属性进行赋值然后将这个类传递到方法中做为参数. 实际操作时才发现,这个类中的字段属性是私有的,不能进行赋值!没有提供公有的方法.而这个类又是打包成 ...
- USB OTG简单介绍、与普通USB线的差别
USB有三类接口A类接口 -----------最常见的扁平接口,四芯 VCC GND D+ D- B类接口 ...
- 《“胡”说IC——菜鸟工程师完美进阶》
<“胡”说IC——菜鸟工程师完美进阶> 基本信息 作者: 胡运旺 出版社:电子工业出版社 ISBN:9787121229107 上架时间:2014-5-15 出版日期:2014 年5月 开 ...