返回
NodeJS中大文件的巧妙读写
前端
2023-10-18 15:56:57
最近在做一些NodeJS的文件读写和分片上传工作,发现NodeJS读取的文件如果超过2GB,就会超过读取Blob的最大值,从而出现读取异常。此外,在NodeJS中读写文件还受服务器RAM的限制等,需要分片处理。本文将介绍如何使用NodeJS巧妙地读写大文件。
使用流式传输
流式传输是处理大文件的一种常用技术。它可以将大文件分割成较小的块,然后逐块处理。NodeJS提供了一个名为“fs.createReadStream()”的函数,可以创建流式读取对象。这个对象可以逐块读取文件,并将其传递给后续的处理程序。
例如,我们可以使用下面的代码来读取一个大文件并将其写入另一个文件:
const fs = require('fs');
const inputFile = 'large_file.txt';
const outputFile = 'new_large_file.txt';
const readStream = fs.createReadStream(inputFile);
const writeStream = fs.createWriteStream(outputFile);
readStream.pipe(writeStream);
这种方法可以避免将整个文件加载到内存中,从而节省内存空间。
使用分片上传
分片上传是另一种处理大文件的方法。它将大文件分割成较小的块,然后逐块上传到服务器。NodeJS提供了一个名为“multer”的库,可以帮助我们实现分片上传。
例如,我们可以使用下面的代码来实现分片上传:
const multer = require('multer');
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/');
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now());
}
});
const upload = multer({ storage: storage });
app.post('/upload', upload.single('file'), (req, res, next) => {
res.json({ message: 'File uploaded successfully' });
});
这种方法可以避免将整个文件上传到服务器,从而减少带宽占用。
总结
使用流式传输或分片上传可以帮助我们在NodeJS中巧妙地读写大文件。这些技术可以避免将整个文件加载到内存中或上传到服务器,从而节省内存空间和带宽占用。