nodejs随机生成5个100M的md5互不相同的文件,带每个文件的进度展示

1. 同步执行版【先生成前一个文件,再生成后面的文件】

const fs = require(‘fs’);
const crypto = require(‘crypto’);

const fileSize = 100 * 1024 * 1024; // 文件大小为100MB
const chunkSize = 1024 * 1024; // 每次写入的数据块大小为1MB
const fileCount = 5; // 每次生成的文件个数
const outputDir = ‘output’; // 输出文件夹名

let progress = 0; // 当前生成进度
let fileIndex = 1; // 当前文件索引

// 创建输出文件夹
if (!fs.existsSync(outputDir)) {
fs.mkdirSync(outputDir);
}

// 生成指定大小的随机数据块
function generateRandomData(size) {
const buffer = Buffer.allocUnsafe(size);
for (let i = 0; i < size; i++) {
buffer[i] = Math.floor(Math.random() * 256);
}
return buffer;
}

// 计算MD5哈希值
function calculateHash(data) {
const hash = crypto.createHash(‘md5’);
hash.update(data);
return hash.digest(‘hex’);
}

// 生成文件
function generateFile() {
if (fileIndex > fileCount) {
console.log(‘所有文件生成完成!’);
return;
}

const fileName = output${fileIndex}.md5;
const writeStream = fs.createWriteStream(${outputDir}/${fileName});
let currentProgress = 0; // 当前文件生成进度

// 生成数据并写入文件
function writeFile() {
if (currentProgress >= fileSize) {
writeStream.end();
console.log(文件${fileName}生成完成!);
fileIndex++;
generateFile(); // 继续生成下一个文件
return;
}

const data = generateRandomData(chunkSize);
const hash = calculateHash(data);

writeStream.write(data, () => {
  currentProgress += chunkSize;
  const percent = Math.floor((currentProgress / fileSize) * 100);
  console.log(`文件${fileName}生成进度:${percent}%`);
  writeFile();
});

}

// 开始生成当前文件
console.log(开始生成文件${fileName}...);
writeFile();
}

// 开始生成文件
console.log(开始生成${fileCount}个文件...);
generateFile();

非同步执行【同时生成5个文件】

const fs = require(‘fs’);
const crypto = require(‘crypto’);

const fileSize = 100 * 1024 * 1024; // 文件大小为100MB
const chunkSize = 1024 * 1024; // 每次写入的数据块大小为1MB
const fileCount = 5; // 同时生成的文件个数
const outputDir = ‘output’; // 输出文件夹名

// 创建输出文件夹
if (!fs.existsSync(outputDir)) {
fs.mkdirSync(outputDir);
}

// 生成指定大小的随机数据块
function generateRandomData(size) {
const buffer = Buffer.allocUnsafe(size);
for (let i = 0; i < size; i++) {
buffer[i] = Math.floor(Math.random() * 256);
}
return buffer;
}

// 计算MD5哈希值
function calculateHash(data) {
const hash = crypto.createHash(‘md5’);
hash.update(data);
return hash.digest(‘hex’);
}

// 生成文件
async function generateFile(index) {
const fileName = output${index}.md5;
const writeStream = fs.createWriteStream(${outputDir}/${fileName});
let progress = 0; // 当前生成进度

return new Promise((resolve, reject) => {
writeStream.on(‘finish’, () => {
console.log(文件${fileName}生成完成!);
resolve();
});

writeStream.on('error', (error) => {
  reject(error);
});

// 生成数据并写入文件
function writeFile() {
  if (progress >= fileSize) {
    writeStream.end();
    return;
  }

  const data = generateRandomData(chunkSize);
  const hash = calculateHash(data);

  writeStream.write(data, () => {
    progress += chunkSize;
    const percent = Math.floor((progress / fileSize) * 100);
    console.log(`文件${fileName}生成进度:${percent}%`);
    writeFile();
  });
}

// 开始生成当前文件
console.log(`开始生成文件${fileName}...`);
writeFile();

});
}

// 同时生成多个文件
async function generateFiles() {
const promises = [];

for (let i = 1; i <= fileCount; i++) {
promises.push(generateFile(i));
}

try {
await Promise.all(promises);
console.log(‘所有文件生成完成!’);
} catch (error) {
console.error(‘生成文件时出现错误:’, error);
}
}

// 开始生成文件
console.log(开始生成${fileCount}个文件...);
generateFiles();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值