使用FileReader进行文件读取

FileReader是什么

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

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

构造函数

FileReader()返回一个新构造的FileReader

想要创建一个FileReader对象,很简单,如下:

let reader = new FileReader();

方法

FileReader接口有4个方法,其中3个用来读取文件,另一个用来中断读取。无论读取成功或失败,方法并不会返回读取结果,这一结果存储在result属性中。

方法名参数描述
readAsBinaryStringfile将文件读取为二进制编码
readAsTextfile,[encoding]将文件读取为文本
readAsDataURLfile将文件读取为DataURL
abort(none)终端读取操作

事件处理程序

事件调用时机
onabort当读取操作被中止时调用
onerror当读取操作发生错误时调用
onload当读取操作成功完成时调用
onloadend当读取操作完成时调用,不管是成功还是失败.该处理程序在onload或者onerror之后调用
onloadstart当读取操作将要开始之前调用
onprogress在读取数据过程中周期性调用

了解了这些基本上就可以进行开发了,如果想了解更多,请阅读FileReader

读取文本

对于type="file"input元素,用户选择文件上传后会生成一个FileList对象,结构如下:

// FileList对象
{
  0: {
    lastModified: 1482289489971,
    lastModifiedDate: Wed Dec 21 2016 11:04:49 GMT+0800,
    name: "index.html",
    size: 1325,
    type: "text/html",
  },
  1: {
    ...
  },
  length: 2
}

我们从中可以获取文件名、修改时间、大小和文件类型等信息,文件内容也是包含在里面的,不过需要FileReader的读取文件方法才能获取,对于纯文本,我们使用readAsText方法,如下:

//FileReader读取文件内容
var reader = new FileReader();
reader.readAsText(files[0], 'UTF-8');
reader.onload = function (e) {
    // urlData就是对应的文件内容
    var urlData = this.result;
};

为了大家更直观的理解,我写了个demo,配合localStorage实现本地文件读取与本地存储,对于localStorage的使用,请查看使用localStorage进行本地存储

图片预览

FileReader的另一个文件读取方法readAsDataURL,可以将图片文件转换为base64编码。这个方法非常有用,可以实现本地图片预览,直接上个MDN的demo,源码:

<!doctype html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<title>Image preview example</title>
<script type="text/javascript">
oFReader = new FileReader(), rFilter = /^(?:image\/bmp|image\/cis\-cod|image\/gif|image\/ief|image\/jpeg|image\/jpeg|image\/jpeg|image\/pipeg|image\/png|image\/svg\+xml|image\/tiff|image\/x\-cmu\-raster|image\/x\-cmx|image\/x\-icon|image\/x\-portable\-anymap|image\/x\-portable\-bitmap|image\/x\-portable\-graymap|image\/x\-portable\-pixmap|image\/x\-rgb|image\/x\-xbitmap|image\/x\-xpixmap|image\/x\-xwindowdump)$/i;

oFReader.onload = function (oFREvent) {
  document.getElementById("uploadPreview").src = oFREvent.target.result;
};

function loadImageFile() {
  if (document.getElementById("uploadImage").files.length === 0) { return; }
  var oFile = document.getElementById("uploadImage").files[0];
  if (!rFilter.test(oFile.type)) { alert("You must select a valid image file!"); return; }
  oFReader.readAsDataURL(oFile);
}
</script>
</head>

<body onload="loadImageFile();">
  <form name="uploadForm">
    <table>
      <tbody>
        <tr>
          <td><img id="uploadPreview" style="width: 100px; height: 100px;" src="" alt="Image preview" /></td>
          <td><input id="uploadImage" type="file" name="myPhoto" onchange="loadImageFile();" /></td>
        </tr>
      </tbody>
    </table>

    <p><input type="submit" value="Send" /></p>
  </form>
</body>
</html>

6人点赞

前端



作者:杜伊特
链接:https://www.jianshu.com/p/5fd16155901a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

### 使用 JavaScript 的 FileReader.onload 事件处理程序读取并解析 JSON 文件 以下是使用 `FileReader.onload` 方法读取并解析 JSON 文件的完整示例: #### 示例代码 ```javascript // 创建一个文件输入元素,用于选择 JSON 文件 const fileInput = document.createElement('input'); fileInput.type = 'file'; fileInput.accept = '.json'; // 限制只能选择 JSON 文件 // 监听文件选择事件 fileInput.addEventListener('change', function (event) { const file = event.target.files[0]; // 获取选中的文件 if (file) { const reader = new FileReader(); // 当文件读取完成时触发 onload 事件 reader.onload = function () { try { const jsonData = JSON.parse(reader.result); // 将文件内容解析为 JSON 对象 console.log(jsonData); // 输出解析后的 JSON 数据 } catch (error) { console.error('JSON 文件格式错误:', error); } }; // 如果文件读取失败,触发 onerror 事件 reader.onerror = function () { console.error('文件读取失败'); }; // 开始读取文件内容 reader.readAsText(file); // 将文件作为文本读取 } else { console.log('未选择任何文件'); } }); // 触发文件选择对话框 fileInput.click(); ``` #### 解释 1. 创建了一个文件输入元素,并将其类型设置为 `file`,允许用户选择本地 JSON 文件[^2]。 2. 使用 `FileReader` 对象读取用户选择的文件内容。当文件读取完成时,`onload` 事件会被触发[^3]。 3. 在 `onload` 事件中,通过 `reader.result` 获取文件内容,并使用 `JSON.parse()` 方法将字符串形式的 JSON 转换为 JavaScript 对象[^1]。 4. 如果 JSON 文件格式不正确,`JSON.parse()` 方法会抛出异常,因此需要使用 `try...catch` 结构捕获并处理错误[^4]。 #### 注意事项 - 确保选择的文件是有效的 JSON 文件,否则可能会导致解析失败。 - 如果需要支持大文件,可以考虑分块读取文件内容以优化性能。 - `FileReader` 支持多种读取方法,例如 `readAsArrayBuffer`、`readAsBinaryString` 和 `readAsDataURL`,但在这里使用 `readAsText` 是最合适的,因为它直接返回文件的文本内容。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值