FileReader

208 阅读3分钟

FileReader

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

创建对象

     /**
            {
                error: null
                onabort: null
                onerror: null
                onload: null
                onloadend: null
                onloadstart: null
                onprogress: null
                readyState: 0
                result: null
            }
         */
        var reader = new FileReader();
        console.log(reader)
        

实例属性

error readyState result

    console.log(reader.error);          //null
    console.log(reader.readyState);     //0 reader 已经创建。还没有调用任何方法。 1读取的方法已经被调用 2完成操作
    console.log(reader.result);         //null     返回文件的内容。只有在读取操作完成后,此属性才有效,返回的数据的格式取决于是使用哪种读取方法来执行读取操作的。

实例方法

abort()

该方法可以取消 FileReader 的读取操作,触发之后 readyState 为已完成(DONE)。 注意 对一个没有正在进行读取操作(readyState 不是 LOADING)的 FileReader 进行 abort 操作,会抛出 DOM_FILE_ABORT_ERR 错误。

readAsArrayBuffer(Blob)

方法用于启动读取指定的 Blob 或 File 内容。当读取操作完成时,readyState 变成 2 DONE(已完成),并触发 loadend 事件,同时 result 属性中将包含一个 ArrayBuffer 对象以表示所读取文件的数据。

readAsDataURL(Blob)

方法用于启动读取指定的 Blob 或 File 内容。当读取操作完成时,readyState 变成 2 DONE(已完成),并触发 loadend 事件,同时同时 result 属性将包含一个data:URL 格式的字符串(base64 编码)以表示所读取文件的内容。

readAsText(Blob,Encoding)

可以将 Blob 或者 File 对象转根据特殊的编码格式转化为内容 (字符串形式);异步方法

事件

abort 取消时执行 error 出错执行 load 加载 loadend 加载完毕 loadstart 开始加载 progress 加载进度

      /**
        {
            error: null
            onabort: null
            onerror: null
            onload: null
            onloadend: null
            onloadstart: null
            onprogress: null
            readyState: 0
            result: null
        }
         */
        var reader = new FileReader();
        console.log(reader.error);          //null
        console.log(reader.readyState);     //0 EMPTY reader 已经创建。还没有调用任何方法。 1 LOADING读取的方法已经被调用      2 DONE完成操作
        console.log(reader.result);         //null     返回文件的内容。只有在读取操作完成后,此属性才有效,返回的数据的格式取决于是使用哪种读取方法来执行读取操作的。

        const blob = new Blob(['asdf'], { type: 'text/plain' })
        console.log(blob);
        reader.addEventListener('abort', onloadend);
        reader.addEventListener('error', onloadend);
        reader.addEventListener('load', onloadend);
        reader.addEventListener('loadend', onloadend);
        reader.addEventListener('loadstart', onloadend);
        reader.addEventListener('progress', onloadend);
        function onloadend(event) {
            console.log("事件"+event.type);
            console.log("当前进度"+event.loaded);
            console.log(event.target.result);
            console.log("总量"+event.total);
        };

        reader.readAsArrayBuffer(blob)//ArrayBuffer
        reader.readAsDataURL(blob)    //data:text/plain;base64,YXNkZg==
        reader.readAsText(blob)       //asdf

        console.log(reader.readyState); 

FileReaderSync

以同步的方式读取File或Blob对象中的内容。 过大会阻塞页面

URL.createObjectURL(blob|File|MediaSource) :DOMString

静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的 URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的 URL 对象表示指定的 File 对象或 Blob 对象。

URL.revokeObjectURL(objectURL);

释放一个之前已经存在的、通过调用 URL.createObjectURL() 创建的 URL 对象。当你结束使用某个 URL 对象之后,应该通过调用这个方法来让浏览器知道不用在内存中继续保留对这个文件的引用了。

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 5天,点击查看活动详情