File
File
继承了 Blob
,可以用于任意需要 Blob
类型的方法中,比如FileReader()
、URL.createObjectURL()
、XMLHttpRequest.send()
这些方法。
File 对象属性
lastModified
返回当前 File 对象所引用文件最后修改时间,自 UNIX 时间起始值(1970年1月1日 00:00:00 UTC)以来的毫秒数。
name
返回当前 File 对象所引用文件的名字。
size
返回文件的大小(单位为字节)。size/1024
为KB
,size/1024/1024
为MB
。
type
返回文件类型如"image/png"
File 构造函数
file = new File(bits, name[, options]);
- bits:
ArrayBuffer
,ArrayBufferView
,Blob
,Array
。是 UTF-8 编码的文件内容。
- name: 表示文件名称
- options.type: 表示将要放到文件中的内容的 MIME 类型。默认值为 "" 。
- options.lastModified: 表示文件最后修改时间的 Unix 时间戳(毫秒)。默认值为 Date.now()。
FileReader
Blob
类型的数据,只可以通过FileReader
来读取。
读取内容的方法都是异步,如果成功结果会放入result
属性中。
读取方法(都是异步)
readAsArrayBuffer()
以 ArrayBuffer 表示所读取的文件内容
可以更方便做计算,比如加密解密
readAsBinaryString()
以 原始二进制 表示所读取的文件内容
很少用
readAsDataURL()
以 data: URL格式的 Base64 字符串 表示所读取文件的内容
常用于图片文件,展示或其他用途
readAsText()
以 字符串 表示所读取的文件内容。
如果是纯文本文件,使用这个即可。
事件回调
onabort
读取操作被中断时触发(FileReader.abort()
)
onerror
读取操作发生错误时触发
onload
读取操作完成时触发
这个时候filesReader.result
中就有值了
onloadstart
读取操作开始时触发
onloadend
读取操作结束时(要么成功,要么失败)触发
onprogress
进度
Blob
Blob 对象表示一个不可变、原始数据的类文件对象。
Blob 表示的不一定是JavaScript原生格式的数据。
File 接口基于Blob,继承了 blob 的功能并将其扩展使其支持用户系统上的文件。
实践一下
表单选择 input
经常用在上传文件中,我们监听input
的change
事件。
通过files
属性来获取(因为input
可以通过multiple
来选择多个文件)
粘贴
粘贴需要监听 paste
事件,通过获取事件的Event
对象e.clipboardData.files
来获取所有的文件对象
拖拽
拖拽需要监听drop
事件,并阻止默认事件(不阻止会使用浏览器打开),通过获取事件的Event
对象e.dataTransfer.files
来获取所有的文件对象
总结
- File 继承了 Blob
- Blob 只可以使用 FileReader 来读取内容
input
使用e.target.files
来获取
- 粘贴 使用
e.clipboardData.files
来获取
- 拖拽 使用
e.dataTransfer.files
来获取
FileReader
获取内容是异步的,需要监听onload
之后拿result