html提交form预处理,HTML5 之图片上传预处理

在开发 H5 应用的时候碰到一个问题,

应用只需要一张小的缩略图,

而用户用手机上传的确是一张大图,

手机摄像机拍的图片好几 M,这可要浪费很多流量。

获取图片

通过 File API 获取图片。

var input = document.createElement('input');

input.type = 'file';

input.addEventListener('change', function() {

var file = this.files[0];

},false);

input.click();

预览图片

可以使用 createObjectURL() 或者 FileReader 预览图片

但是我一般用的createObjectURL()方法比较多

var img = document.createElement('img');

img.src = window.URL.createObjectURL(file);

var img = document.createElement("img");

var reader = new FileReader();

reader.onload = function(e) {

img.src = e.target.result;

}

reader.readAsDataURL(file);

使用 canvas 做缩略图

var canvas = document.createElement("canvas");

var ctx = canvas.getContext("2d");

var MAX_WIDTH = 800;

var MAX_HEIGHT = 600;

var width = img.width;

var height = img.height;

if (width > height) {

if (width > MAX_WIDTH) {

height *= MAX_WIDTH / width;

width = MAX_WIDTH;

}

} else {

if (height > MAX_HEIGHT) {

width *= MAX_HEIGHT / height;

height = MAX_HEIGHT;

}

}

canvas.width = width;

canvas.height = height;

ctx.drawImage(img, 0, 0, width, height);

上传缩略图

使用HTML5的新API formData来实现图片的ajax上传

canvas.toBlob(function(blob) {

var form = new FormData();

form.append('file', blob);

fetch('/api/upload', {method: 'POST', body: form});

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值