当前位置:首页 > JavaScript

js实现文件合并

2026-02-03 03:06:51JavaScript

使用 File API 读取文件内容

在浏览器环境中,可以利用 FileReader API 读取用户选择的文件内容。通过监听文件输入框的 change 事件获取文件列表,使用 FileReader 异步读取文本或二进制数据。

const fileInput = document.getElementById('file-input');
fileInput.addEventListener('change', (event) => {
  const files = event.target.files;
  const readers = Array.from(files).map(file => {
    return new Promise((resolve) => {
      const reader = new FileReader();
      reader.onload = (e) => resolve(e.target.result);
      reader.readAsText(file); // 或 readAsArrayBuffer 处理二进制文件
    });
  });
});

合并文本文件内容

对于文本文件,可通过字符串拼接实现内容合并。使用 Promise.all 等待所有文件读取完成,将结果拼接后生成新的 Blob 对象供下载。

Promise.all(readers).then((fileContents) => {
  const mergedContent = fileContents.join('\n'); // 自定义分隔符
  const blob = new Blob([mergedContent], { type: 'text/plain' });
  const url = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = 'merged.txt';
  a.click();
});

合并二进制文件(如图片/PDF)

处理二进制文件需使用 ArrayBufferUint8Array 进行拼接。以下示例展示合并 PDF 文件的方法:

Promise.all(readers).then((arrayBuffers) => {
  const totalLength = arrayBuffers.reduce((acc, buf) => acc + buf.byteLength, 0);
  const mergedBuffer = new Uint8Array(totalLength);
  let offset = 0;
  arrayBuffers.forEach(buf => {
    mergedBuffer.set(new Uint8Array(buf), offset);
    offset += buf.byteLength;
  });
  const blob = new Blob([mergedBuffer], { type: 'application/pdf' });
  // 下载逻辑与文本文件相同
});

Node.js 环境实现

在服务器端使用 Node.js 时,可通过 fs 模块同步或异步合并文件:

const fs = require('fs');
const path = require('path');

function mergeFiles(inputDir, outputPath) {
  const files = fs.readdirSync(inputDir);
  const content = files.map(file => 
    fs.readFileSync(path.join(inputDir, file))
  ).join('\n');
  fs.writeFileSync(outputPath, content);
}

大文件分块处理

处理大文件时建议采用流式操作以避免内存溢出。Node.js 示例:

js实现文件合并

const outputStream = fs.createWriteStream('merged-large.txt');
files.forEach(file => {
  const inputStream = fs.createReadStream(file);
  inputStream.pipe(outputStream, { end: false });
  inputStream.on('end', () => {
    if (isLastFile) outputStream.end();
  });
});

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

相关文章

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取所有…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js jquery

js jquery

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