当前位置:首页 > JavaScript

js实现文件合并

2026-03-16 03:48:00JavaScript

使用File API读取文件内容

通过HTML5的File API可以读取用户上传的文件内容。使用FileReader对象异步读取文件内容,将多个文件的内容合并后保存为一个新文件。

function mergeFiles(files, outputFileName) {
  const reader = new FileReader();
  const mergedContent = [];
  let filesProcessed = 0;

  files.forEach((file, index) => {
    const reader = new FileReader();
    reader.onload = function(e) {
      mergedContent[index] = e.target.result;
      filesProcessed++;
      if (filesProcessed === files.length) {
        const blob = new Blob(mergedContent, { type: 'text/plain' });
        const url = URL.createObjectURL(blob);
        const a = document.createElement('a');
        a.href = url;
        a.download = outputFileName;
        a.click();
      }
    };
    reader.readAsText(file);
  });
}

使用Node.js合并本地文件

在Node.js环境中,可以使用fs模块同步或异步地读取和写入文件,实现文件合并功能。

js实现文件合并

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

function mergeFiles(filePaths, outputPath) {
  const mergedContent = filePaths.map(filePath => {
    return fs.readFileSync(filePath, 'utf8');
  }).join('\n');

  fs.writeFileSync(outputPath, mergedContent);
}

// 使用示例
mergeFiles(['file1.txt', 'file2.txt'], 'merged.txt');

处理大文件的分块读取

对于大文件,可以采用分块读取的方式避免内存问题。这种方法特别适合Node.js环境处理大型文件。

js实现文件合并

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

async function mergeLargeFiles(filePaths, outputPath) {
  const writeStream = fs.createWriteStream(outputPath);

  for (const filePath of filePaths) {
    const readStream = fs.createReadStream(filePath);
    await new Promise((resolve, reject) => {
      readStream.pipe(writeStream, { end: false });
      readStream.on('end', resolve);
      readStream.on('error', reject);
    });
  }

  writeStream.end();
}

浏览器端多文件合并下载

在浏览器环境中,可以通过Blob对象将多个文件内容合并后提供下载。

function downloadMergedFile(texts, fileName) {
  const blob = new Blob(texts, { type: 'text/plain' });
  const url = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = fileName;
  document.body.appendChild(a);
  a.click();
  document.body.removeChild(a);
  URL.revokeObjectURL(url);
}

合并二进制文件

处理二进制文件(如图片、PDF等)时,需要使用ArrayBuffer来正确合并文件内容。

function mergeBinaryFiles(files, outputFileName) {
  const readers = files.map(file => {
    return new Promise(resolve => {
      const reader = new FileReader();
      reader.onload = e => resolve(e.target.result);
      reader.readAsArrayBuffer(file);
    });
  });

  Promise.all(readers).then(arrayBuffers => {
    const totalLength = arrayBuffers.reduce((sum, buffer) => sum + buffer.byteLength, 0);
    const mergedArray = new Uint8Array(totalLength);
    let offset = 0;

    arrayBuffers.forEach(buffer => {
      mergedArray.set(new Uint8Array(buffer), offset);
      offset += buffer.byteLength;
    });

    const blob = new Blob([mergedArray], { type: files[0].type });
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = outputFileName;
    a.click();
  });
}

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

相关文章

js实现轮播图

js实现轮播图

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

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js图片上传实现

js图片上传实现

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API实现基础图片上传功能。HTML部分需要设置accept="image/…