当前位置:首页 > 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
分享给朋友:

相关文章

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

js实现计算器

js实现计算器

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

js实现预览

js实现预览

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