当前位置:首页 > 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 对象供下载。

js实现文件合并

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 文件的方法:

js实现文件合并

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 示例:

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实现倒计时

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

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEv…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaS…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…