0


【JS】前端文件读取FileReader操作总结

前端文件读取FileReader操作总结

FileReader

是 JavaScript 中的一个 Web API,它允许 web 应用程序异步读取用户计算机上的文件(或原始数据缓冲区)的内容,例如读取文件以获取其内容,并在不将文件发送到服务器的情况下在客户端使用它。这对于处理图片、文本文件等非常有用,尤其是当你想要在用户界面中即时显示文件内容或进行文件预览时。

创建 FileReader 对象

首先,你需要创建一个

FileReader

的实例:

let reader =newFileReader();

FileReader 的主要方法和事件

FileReader

提供了几个方法和一个事件用于读取文件和处理读取结果。

方法
  • readAsArrayBuffer(file): 异步读取文件内容,并将结果作为一个 ArrayBuffer 对象返回。
  • readAsBinaryString(file): 异步读取文件内容,并将结果作为二进制字符串返回(不推荐使用,已被弃用)。
  • readAsDataURL(file): 异步读取文件内容,并将结果作为一个表示文件内容的 DataURL 返回。这特别适用于图片文件,因为它可以直接被 <img> 标签的 src 属性使用。
  • readAsText(file, [encoding]): 异步读取文件内容,并将结果作为文本字符串返回。你可以指定一个编码(默认为 ‘UTF-8’)。
事件
  • onload: 当读取操作成功完成时触发。
  • onerror: 当读取操作发生错误时触发。
  • onabort: 当读取操作被中止时触发(可以通过调用 abort() 方法来中止)。
  • onloadstart, onprogress, onloadend: 这些事件提供了读取操作的更多控制点,比如开始、进度和结束。

使用 FileReader 读取文件

以下是一个使用

FileReader

读取文件并将其内容作为文本显示在网页上的简单示例:

<inputtype="file"id="fileInput"><divid="output"></div><script>
  document.getElementById('fileInput').addEventListener('change',function(e){const file = e.target.files[0];if(!file){return;}const reader =newFileReader();
    reader.onload=function(e){
      document.getElementById('output').textContent = e.target.result;};
    reader.onerror=function(error){
      console.error('Error: ', error);};

    reader.readAsText(file);});</script>

注意点

  • 读取文件是异步的,所以 FileReader 的方法(如 readAsText)会立即返回,不会等待文件读取完成。文件读取完成后,会触发 onload 事件。
  • 出于安全考虑,浏览器中的 FileReader 只能读取用户通过 <input type="file"> 或其他用户交互(如拖放)选择的文件。
  • 使用 FileReader 时,请确保处理所有可能的错误情况,比如文件读取失败或文件为空。
  • 对于大文件的处理,请注意性能和内存使用,可能需要使用更复杂的策略,如分片读取或流式处理。

FileReader对象的其他方法

FileReader

对象是JavaScript中的一个重要API,它允许web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容。除了常见的

readAsText

readAsDataURL

readAsArrayBuffer

方法外,

FileReader

还提供了其他几个方法,尽管其中一些可能已不被推荐使用。以下是对

FileReader

对象其他方法的介绍:

1. 已弃用的方法

  • readAsBinaryString(file): 此方法用于将文件内容读取为二进制字符串,但需要注意的是,它已经被标记为弃用,并不建议在新代码中使用。因为二进制字符串并不是处理二进制数据的最佳方式,且在不同浏览器和平台间可能存在兼容性问题。

2. 读取控制方法

  • abort(): 此方法用于中止读取操作。如果读取操作尚未完成,调用此方法将停止读取并触发onabort事件。这对于需要取消长时间运行的文件读取操作非常有用。

3. 事件处理

虽然这些不是

FileReader

的直接方法,但事件处理是

FileReader

使用中不可或缺的一部分。

FileReader

实例支持一系列事件,用于处理读取过程中的不同阶段和状态:

  • onloadstart: 在读取操作开始时触发。
  • onprogress: 在读取过程中周期性触发,可以用来显示读取进度。
  • onload: 在读取操作成功完成时触发。此时,可以通过FileReaderresult属性访问读取到的文件内容。
  • onloadend: 在读取操作结束时触发,无论操作是否成功。这是onloadonerror之后的最终事件。
  • onerror: 在读取操作发生错误时触发。可以通过FileReadererror属性访问错误信息。

使用示例

以下是一个使用

FileReader

和它的事件处理方法的示例:

let input = document.querySelector('input[type="file"]');
input.addEventListener('change',function(e){let file = e.target.files[0];if(!file){return;}let reader =newFileReader();

    reader.onloadstart=function(e){
        console.log('读取开始');};

    reader.onprogress=function(e){if(e.lengthComputable){let percentComplete =(e.loaded / e.total)*100;
            console.log('读取进度: '+ percentComplete +'%');}};

    reader.onload=function(e){
        console.log('读取成功');// 使用读取到的文件内容,例如:// document.getElementById('output').textContent = e.target.result;};

    reader.onerror=function(e){
        console.error('读取错误: ', e.target.error);};// 选择读取方法,例如:
    reader.readAsText(file,'UTF-8');// 或者 reader.readAsDataURL(file);// 或者 reader.readAsArrayBuffer(file);});

注意事项

  • 当使用FileReader时,请确保处理所有可能的事件,包括成功、错误和中止。
  • 读取文件是异步的,所以FileReader的方法会立即返回,不会等待文件读取完成。
  • 出于安全考虑,FileReader只能读取用户通过用户交互(如点击或拖放)选择的文件。
  • 对于大文件,请考虑使用onprogress事件来提供读取进度的反馈,并可能需要在读取过程中进行内存管理。

其他方法

FileReader

对象在 JavaScript 中主要用于异步读取文件内容,其主要的方法已经涵盖了大多数文件读取的场景。除了已经提到的

readAsText

readAsDataURL

readAsArrayBuffer

(这些是常用的读取方法)以及已弃用的

readAsBinaryString

之外,

FileReader

并没有其他直接用于读取文件内容的方法。

然而,

FileReader

对象提供了几个用于控制读取过程和处理读取结果的事件方法,这些虽然不是直接用于读取文件内容的“方法”,但在文件读取过程中扮演着重要角色。这些事件方法包括:

  1. onloadstart:当读取操作开始时触发。
  2. onprogress:在读取过程中定期触发,可以用来显示读取进度。
  3. onload:当读取操作成功完成时触发。此时,可以通过 FileReaderresult 属性访问读取到的文件内容。
  4. onloadend:在读取操作结束时触发,无论操作是否成功。
  5. onerror:当读取操作发生错误时触发。
  6. onabort:当读取操作被中止时触发(可以通过调用 abort() 方法来中止)。

在实际使用中,通常会结合这些事件方法来处理文件读取的不同阶段和结果。

此外,虽然

FileReader

本身没有提供其他读取文件内容的方法,但你可以通过结合其他 JavaScript API(如

File

API、

Blob

API、

URL.createObjectURL()

等)来实现更复杂的文件处理功能。例如,你可以使用

Blob

对象来处理二进制数据,或者使用

URL.createObjectURL()

来创建一个指向文件内容的 URL,然后将其用于

<img>

<audio>

<video>

等标签的

src

属性中。

总的来说,

FileReader

提供了灵活且强大的文件读取能力,通过结合其提供的方法和事件,你可以实现各种文件处理功能。对于更复杂的文件处理需求,你可能需要结合使用多个 JavaScript API 和技术。


本文转载自: https://blog.csdn.net/2401_82471222/article/details/140705077
版权归原作者 程序员-张师傅 所有, 如有侵权,请联系我们删除。

“【JS】前端文件读取FileReader操作总结”的评论:

还没有评论