笔者最近在做一些node端的文件读写和分片上传工作,在这个过程中,发现node读取的文件如果超过2G,超过了读取Blob最大值,会出现读取异常,此外在node中读写文件也受服务器RAM的限制等,需要分片读取,本人记录一下遇到的问题以及解决问题的经过。
- node中的文件读写
- node文件读写RAM和Blob大小的限制
- 其他
一、node中的文件读写
1.1 常规文件读写
常规的,如果我们要读取一个比较小的文件,可以直接通过:
const fs = require('fs')
let data = fs.readFileSync("./test.png")
console.log(data,123)
//输出data = <Buffer 89 50 4e ...>
一般而言,同步的方法不是很推荐,因为js/nodejs是单线程的,同步的方法会阻塞主线程。最新版的node直接提供了fs.promise,可以结合async/await直接使用:
const fs = require('fs')
const readFileSync = async () => {let data = await fs.promises.readFile("./test.png")console.log(data,123)
}
readFileSync()
//输出data = <Buffer 89 50 4e ...>
这里通过异步的方法调用不会阻塞主线程,多个文件读取的IO也可以并行进行等。
1.2 Stream文件读写
常规的文件读写,我们会把文件一次性的读取到内存中,这种方法时间效率和内存效率都很低,时间效率低是指必须要一次性读取完毕后才能执行后续才做,内存效率低是指必须把这个文件都一次性读取放入内存中,很占用内存。因此这种情况下,我们一般使用Stream来进行文件的读取:
const fs = require('fs')
const readFileTest = () => {var data = ''var rs = fs.createReadStream('./test.p