前言
HTML5 中供给的文件API在前端中有着丰富的应用,上传、下载、读取内容等在平常的交互中很平常。况且在各个浏览器的兼容亦比较好,包含移动端,除了 IE 只支持 IE10 以上的版本。想要更好地把握好操作文件的功能,先要熟悉每一个API。
FileList 对象和 file 对象
HTML 中的 input[type="file"] 标签有个 multiple 属性,准许用户选取多个文件,FileList对象则便是暗示用户选取的文件列表。这个列表中的每一个文件,便是一个 file 对象。
file 对象的属性:
name : 文件名,不包括路径。
type : 文件类型。照片类型的文件都会以 image/ 开头,能够由此来限制只准许上传照片。
size : 文件体积。能够按照文件体积来进行其他操作。
lastModified : 文件最后修改的时间。
<input type="file" id="files" multiple>
<script>
var elem = document.getElementById(files);
elem.onchange = function (event) {
var files = event.target.files;
for (var i = 0; i < files.length; i++) {
// 文件类型为 image 并且文件体积少于 200kb
if(files[i].type.indexOf(image/) !== -1 && files[i].size < 204800){
console.log(files[i].name);
}
}
}
</script>
input 中有个 accept 属性,能够用来规定能够经过文件上传进行提交的文件类型。
accept="image/*" 能够用来限制只准许上传图像格式。然则在 Webkit 浏览器下却显现了响应滞慢的问题,要等上好几秒才弹出文件选取框。
处理办法便是将 * 通配符改为指定的 MIME 类型。
<input type="file" accept="image/gif,image/jpeg,image/jpg,image/png">
Blob 对象
Blob 对象相当于一个容器,能够用于存放二进制数据。它有两个属性,size 属性暗示字节长度,type 属性暗示 MIME 类型。
怎样创建
Blob 对象能够运用 Blob() 构造函数来创建。
var blob = new Blob([hello], {type:"text/plain"});
Blob 构造函数中的第1个参数是一个数组,能够存放 ArrayBuffer对象、ArrayBufferView 对象、Blob对象和字符串。
Blob 对象能够经过 slice() 办法来返回一个新的 Blob 对象。
var newblob = blob.slice(0,5, {type:"text/plain"});
slice() 办法运用三个参数,均为可选。第1个参数表率要从Blob对象中的二进制数据的初始位置起始复制,第二个参数表率复制的结束位置,第三个参数为 Blob 对象的 MIME 类型。
canvas.toBlob() 亦能够创建 Blob 对象。toBlob() 运用三个参数,第1个为回调函数,第二个为照片类型,默认为 image/png,第三个为照片质量,值在0到1之间。
var canvas = document.getElementById(canvas);
canvas.toBlob(function(blob){ console.log(blob); }, "image/jpeg", 0.5);
下载文件
Blod 对象能够经过 window.URL 对象生成一个网络位置,结合 a 标签的 download 属性来实现下载文件功能。
例如把 canvas 下载为一个照片文件。
var canvas = document.getElementById(canvas);
canvas.toBlob(
|