对于图片上传,大家应该都不陌生,有时候需要对图片的格式及大小进行校验。但是随着业务的发展,现在越来越多的地方,对图片的长宽尺寸有严格的限制,只校验图片的格式及大小,已经不能满足目前的需求。
File API
谈到图片、文件上传,就不得不提File API。 File API在表单文件输入字段基础上,添加了一些直接访问文件信息的接口。HTML5 在DOM中为文件输入元素添加了一个files集合。File 对象是特殊类型的Blob,且可以用在任意的Blob 类型的context中。比如: FileReader,URL.createObjectURL(),createImageBitma()及XMLHttpRequest.send()都能处理Blob和File。
File接口继承了Blob接口属性:
File.lastModified
只读,返回当前File对象所引用文件最后修改时间,自1970年1月1日0:00以来的毫秒数
File.lastModifiedDate
只读,返回当前file对象所引用文件最后修改时间
File.name
只读,返回当前File对象所引用文件的名字
File.size
只读,返回文件的大小
File.type
只读,返回文件的MIME类型
通过File API提供的FileReader类型,可以读取文件中的数据。FileReader是一种异步文件读取机制。FileReader提供了下面几个方法:
1、 readAsText(file, encoding): 以纯文本形式读取文件,将读取到的文本保存在 result 属性中, 第二个参数用于指定编码类型,是可选的。
2、 readAsDataURL(file): 读取文件并将文件数据以URI的形式保存在result属性中
3、 readAsBinaryString(file): 读取文件并将一个字符串保存在result属性中,字符串中每个字符表示一字节
4、 readAsArrayBuffer(file): 读取文件并将一个包含文件内容的ArrayBuffer保存在result属性中
由于读取过程是异步的,FileReader也提供了几个事件,最常用为progress、error和load事件。
关于图片格式及大小
首先,对于图片的格式,可以从图片选择上传这一步就可以规避不需要的图片格式。
1 | //只允许上传jpeg,png格式的图片 |
如果不设置accept属性,也可以在 onchange 事件中取得 files 值,然后对文件的 type 属性进行校验。
1 | <div class='test'> |
图片的长宽尺寸
1 | <div class='test'> |
参考:
- File
- [Javascript高程]