当前位置:首页 > JavaScript

js实现文件读取

2026-03-15 16:45:47JavaScript

使用FileReader API读取文件内容

FileReader是浏览器提供的API,允许异步读取用户计算机上的文件内容。以下是基本实现方式:

const fileInput = document.getElementById('fileInput');
fileInput.addEventListener('change', (event) => {
  const file = event.target.files[0];
  const reader = new FileReader();

  reader.onload = (e) => {
    const content = e.target.result;
    console.log(content);
  };

  reader.readAsText(file);
});

读取不同类型文件的方法

FileReader提供多种读取方式,适用于不同文件类型:

// 读取为文本
reader.readAsText(file);

// 读取为DataURL(Base64编码)
reader.readAsDataURL(file);

// 读取为二进制字符串
reader.readAsBinaryString(file);

// 读取为ArrayBuffer
reader.readAsArrayBuffer(file);

处理大文件的分片读取

对于大文件,可采用分片读取策略:

js实现文件读取

const chunkSize = 1024 * 1024; // 1MB
let offset = 0;

function readChunk() {
  const chunk = file.slice(offset, offset + chunkSize);
  const reader = new FileReader();

  reader.onload = (e) => {
    // 处理当前分片数据
    offset += chunkSize;
    if(offset < file.size) {
      readChunk();
    }
  };

  reader.readAsArrayBuffer(chunk);
}

监听读取进度

FileReader支持进度事件监听:

reader.onprogress = (event) => {
  if(event.lengthComputable) {
    const percentLoaded = Math.round((event.loaded / event.total) * 100);
    console.log(`${percentLoaded}% loaded`);
  }
};

reader.onerror = () => {
  console.error('文件读取错误');
};

使用Blob对象处理文件

Blob API可直接操作文件数据:

js实现文件读取

const blob = new Blob(['文件内容'], { type: 'text/plain' });
const url = URL.createObjectURL(blob);

// 创建下载链接
const a = document.createElement('a');
a.href = url;
a.download = 'example.txt';
a.click();

现代浏览器中的Promise封装

将FileReader封装为Promise更易于使用:

function readFileAsText(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = () => resolve(reader.result);
    reader.onerror = reject;
    reader.readAsText(file);
  });
}

// 使用方式
readFileAsText(file)
  .then(content => console.log(content))
  .catch(error => console.error(error));

Node.js环境下的文件读取

在Node.js环境中使用fs模块:

const fs = require('fs');

// 同步读取
const content = fs.readFileSync('path/to/file', 'utf8');

// 异步读取
fs.readFile('path/to/file', 'utf8', (err, data) => {
  if(err) throw err;
  console.log(data);
});

// 使用Promise版本(fs.promises)
async function readFile() {
  try {
    const data = await fs.promises.readFile('path/to/file', 'utf8');
    console.log(data);
  } catch(err) {
    console.error(err);
  }
}

标签: 文件js
分享给朋友:

相关文章

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

java如何读取文件

java如何读取文件

读取文件的常用方法 Java提供了多种读取文件的方式,适用于不同场景和需求。以下是几种常见的方法: 使用FileInputStream和BufferedInputStream读取二进制文件 try…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

vue文件下载实现

vue文件下载实现

使用 Blob 对象下载文件 在 Vue 中可以通过创建 Blob 对象实现文件下载。通过将后端返回的二进制数据转换为 Blob,再生成下载链接触发浏览器下载行为。 axios.get('/api/…