上传
在上传文件的操作中, 可以使用formData 或者 fileReader 进行上传操作, 使用 fileReader 可以在本地将上传的文件转为二进制的数据格式; formData 是在 XMLHttpRequest 中的接口,可以用来实现模拟的表单提交, 当前端通过 ajax 向后端传递文件的时候, 使用 ajax 提交 formData 可以实现异步上传二进制文件1 | <input type="file" onClick={ this.uploadFile.bind(this) } /> |
filereader 或者通过 formData 都可以实现上传文件FileReader:
1 | uploadFile(fileInput) { |
1 | FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。 |
fileReader 接受的参数可以是一个 File 对象或者 Blob 对象, 使用上传文件的时候, 接收的是一个 fileList 对象。构造函数
1 | const reader = new FileReader(); // 创建一个新的 filereader 实例 |
相关方法
reader.readAsArrayBuffer(file) : 将文件读取为 ArrayBuffer 的数据对象ArrayBuffer 是一种二进制数组,通过 ArrayBuffer 中的一些语法可以实现使用数组的语法处理二进制数据reader.readAsText(file, [encode]) : 读取文件内的内容作为字符串的形式输出,这个方法读取的是文件内的内容,其中的 encode 用于将 file 对象进行转换的编码格式;reader.readAsDataURL(file): 将文件读取为 DataUrl相关属性
reader.error: 表示在读取文件的时候发生的错误;reader.readyState: 表示当前上传文件的状态:0: 表示当前文件尚未加载1: 表示当前文件正在加载中2: 表示当前文件已经完成加载reader.result : 上传文件的内容,只有上传成功之后这个属性才有值事件处理
| 事件名 | 描述 |
|---|---|
| Onabort | 当读取操作中断的时候触发 |
| Onerror | 当操作发生错误的时候触发 |
| Onload | 当读取操作完成的时候触发 |
| Onloadstart | 当开始进行读取的时候触发 |
| Onloadend | 当读取操作结束的时候触发 |
| Onprogress | 当读取的时候触发 |
FormData:
1 | uploadFile(fileInput) { |
下载
常用的下载操作是创建一个a 标签, 通过 a 标签的 href 指向下载的文件链接,通过使用 download 属性来说明下载的文件名称:1 | <a href="" download="文件.txt">下载文件</a> // download 表明下载的文件名, href 指向下载的文件的地址 |
a 标签的链接进行下载操作, 通过使用 window.URL.createObjectURL 转为链接。window.URL.createObjectURL:接受参数为一个 file 对象或者一个 blob 对象, 最后生成一个 url, 这个url指向参数中给定的对象。这个 URL 的生命周期和创建它的窗口中的 document 绑定,当不需要使用 URL 对象的时候, 可以通过 URL.revokeObjectURL 进行释放, 已获得最佳性能和内存使用情况。在实际的开发中, 通常使用js 来创建下载标签, 代码如下:1 | // name: 下载的文件名 |
new Blob([data]) 转换为 blob 对象。Blob
blob 是 js 中的对象,可以存储大量的二进制编码格式的数据, 使用 blob, 当 input 标签 type 设为 file 的时候提交的 fileList 中的每一个 file 对象就是基于 blob 对象的;构造函数
new Blob(array, [,options]):array 中的值可能是 ArrayBuffer, ArrayBufferView, Blob, DOMString 对象, 或者这些对象的混合。options 字段是可选的字段, 包含下面两种值:type: 表明将要放入blob中的数组内容的MIME类型- endings: 决定第一个参数的数据格式,可以取值为 "transparent" 或者 "native"(transparent的话不变,是默认值,native 的话按操作系统转换
方法
Blob.slice([start[, end[, contentType]]])用于对 Blob 进行"切割", 返回一个新的 Blob 对象, 包含特定字节范围内的数据属性
Blob.size: 在 Blob 数据对象中的字节大小。Blob.type: Blob 数据对象中的 MIME 类型。使用 Blob 存储的数据对象读取的唯一方式是通过使用 FileReader 进行读取, 通过使用 FileReader 中的 readAsDataURL 或者 readAsArrayBuffer 将 Blob 中的数据类型读取为 ArrayBuffer 或者 dataurl 的格式。