2023.03.29文件对象File 和FileReader对象

311 阅读4分钟

File 对象

File构造函数

我们接触的多数关于 File 的操作都是读取,js也为我们提供了手动创建 File 对象的构造函数:File(bits, name[, options])。

bits (required) ArrayBuffer,ArrayBufferView,Blob,或者 Array[string] — 或者任何这些对象的组合。这是 UTF-8 编码的文件内容。。* name [String] (required) 文件名称,或者文件路径.* options [Object] (optional) 选项对象,包含文件的可选属性。可用的选项如下:* type: string, 表示将要放到文件中的内容的MIME类型。默认值为 '' 。* lastModified: 数值,表示文件最后修改时间的 Unix 时间戳(毫秒)。默认值为 Date.now()。

示例:

var file1 = new File(['text1', 'text2'], 'test.txt', {type: 'text/plain'}); 

根据已有的 blob 对象创建 File 对象:

var file2 = new File([blob], 'test.png', {type: 'image/png'}); 

File实例属性

File 对象的实例内容不可见,但是有以下属性可以访问:

属性名称读/写描述
name只读返回文件的名称.由于安全原因,返回的值并不包含文件路径 。
type只读返回 File 对象所表示文件的媒体类型(MIME)。例如 PNG 图像是 "image/png".
lastModified只读number, 返回所引用文件最后修改日期,自 1970年1月1日0:00 以来的毫秒数。
lastModifiedDate只读Date, 返回当前文件的最后修改日期,如果无法获取到文件的最后修改日期,则使用当前日期来替代。
<input type="file" id='file'> 

document.getElementById('file').addEventListener('change', 
function(event){
const file = this.files[0];
if (file){
console.log(file.name);
console.log(file.size);
console.log(file.lastModified);
console.log(file.lastModifiedDate);}
}); 

File实例方法

slice([start[, end[, contentType]]])

File 对象没有定义额外的方法,由于继承了 Blob 对象,也就继承了 slice方法,用法同 Blob 的 slice 方法。

FileReader, URL.createObjectURL(), createImageBitmap(), 及 XMLHttpRequest.send() 都能处理 Blob 和 File。

FileReader 对象

FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,
使用 File 或 Blob 对象指定要读取的文件或数据。

其中 File 对象可以是来自用户在一个 input 元素上选择文件后返回的 FileList, 也可以来自拖放操作生成的 DataTransfer 对象,还可以是来自在一个 HTMLCanvasElement 上执行 mozGetAsFile() 方法后返回结果。

FileReader构造函数

var reader = new FileReader()

构造函数不需要传入参数,返回一个 FileReader 的实例。FileReader 继承 EventTarget对象。

FileReader实例属性

属性名称读/写描述
error只读DOMException 的实例,表示在读取文件时发生的错误 。
result只读文件的内容,该属性仅在读取操作完成后(load)后才有效,格式取决于读取方法
readyState只读表示读取文件时状态的数字

readeyState的取值如下:

常量名描述
0EMPTY还没有加载任何数据
1LOADING数据正在被加载
2DONE已完成全部的读取请求.

使用示例:

var reader = new FileReader();
console.log(reader.error); // null
console.log(reader.result);// null
console.log(reader.readyState);// 0
console.log(reader.EMPTY); // 0
console.log(reader.LOADING); // 1
console.log(reader.DONE);// 2 

EMPTY、LOADING、DONE 这三个属性同时存在于 FileReader 和它的的原型对象上,因此实例上有这三个属性,FileReader 对象本身也有这三个属性:

console.log(FileReader.EMPTY); // 0
console.log(FileReader.LOADING); // 1
console.log(FileReader.DONE);// 2 

FileReader事件

文件的读取是一个异步的过程,和 XMLHttpRequest 对象一样,在读取操作过程中会触发一系列事件。

事件名称描述使用示例
abort读取操作被中断时触发。reader.onabort = function(event) {}
error在读取操作发生错误时触发。 reader.onerror = function(event) {}
load读取操作完成时触发。reader.addEventListener('load', function(event) {})
loadstart读取操作开始时触发。reader.onloadstart = function(event) {}
loadend读取操作结束时(要么成功,要么失败)触发。reader.onloadend = function(event) {}
progress在读取Blob时触发。reader.onprogress = function(event) {}

FileReader实例方法

FileReader 的实例具有以下可操作的方法:

方法名称描述使用示例
abort()手动终止读取操作,只有当 readyState 为 1 时才能调用,调用后,readyState 值为 2reader.abort()
readAsArrayBuffer(blob)读取指定的 Blob 或 File 对象。读取操作完成后(触发loadend事件),result属性将包含一个 ArrayBuffer 对象表示所读取的文件的数据。reader.readAsArrayBuffer(blob)
readAsDataURL(blob)读取指定的 Blob 或 File 对象。读取操作完成后(触发loadend事件),result属性将包含一个 data:URL 格式的字符串(base64编码)reader.readAsArrayBuffer(file)
readAsBinaryString(blob)已废弃,用 readAsArrayBuffer 代替--
readAsText(blob[, encoding])将 Blob 或者 File 对象转根据特殊的编码格式转化为内容(字符串形式), 默认编码是 utf-8reader.readAsArrayBuffer(blob)

读取本地图片示例:

<input type="file" id='file' accept="image/png, image/jpg, image/jpeg, image/gif" />><br />>
<img src="" alt="Image preview..."> 


var preview = document.querySelector('img');
var reader= new FileReader();
reader.addEventListener("load", function () {
preview.src = reader.result;
}, false);
document.getElementById('file').addEventListener('change', function (event) {
var file = this.files[0];
if (file) {
reader.readAsDataURL(file);
}
}); 

原文链接:blog.csdn.net/WLANQY/arti…