const path = require('path');const fse = require('fs-extra');// fs的扩展包// 合并文件const UPLOAD_DIR = path.resolve(__dirname,'target');// 需要合成的文件名称const filename = 'yb'// 合成后的路径文件路径const filePath = path.resolve(__dirname,'img',`${filename}.jpeg`);/** * 先读取出来然后写入文件 * @param {path} 写入路径 * @param {writeStream} 写入流 * @returns Promise */const pipeStream = (path ,writeStream) => new Promise(resolve => { // 想读出来 后写入 const readStream = fse.createReadStream(path); // 结束之后就返回成功 readStream.on('end',()=>{ // 成功后就删除文件 逐个删除 fse.unlinkSync(path) resolve() }) readStream.pipe(writeStream) })//const mergeFileChunk = async (filePath,filename,size) =>{ // 文件地址 const chunkDir = path.resolve(UPLOAD_DIR,filename); // 读取目录下所有文件 返回一个数组类型 const chunkPaths = await fse.readdir(chunkDir) // 因为获取的文件可能是无须的,所以需要排序 chunkPaths.sort((a,b)=> a.split('-')[1] - b.split('-')[1]) // 并发 await Promise.all( // 编程一个Promise的写入数组 chunkPaths.map((chunkPath,index)=>{ // 返回一个promise // 传入 1、每一块地址 2、创建写入流 pipeStream( path.resolve(chunkDir,chunkPath), // 写入文件名称 写文件大小(从哪个先开始) fse.createWriteStream(filePath,{ start:index * size, end:(index + 1) * size }) ) }) ) // 成功后删除文件目录 fse.rmdirSync(chunkDirs)}mergeFileChunk(filePath,filename,0.5 * 1024 * 1024)