目标:将大文件上传到AWS Glacier,而无需将整个文件保存在内存中。
我现在正在使用fs.readFileSync()上传到glacier,一切正常。但是,我需要处理大于4GB的文件,我想并行上传多个块。这意味着要进行多部分上传。我可以选择块的大小,但是glacier需要每个块的大小相同(除了最后一个)
这个线程建议我可以在读取流上设置块大小,但实际上并不保证我能得到它。
有没有关于如何在不将整个文件读入内存并手动拆分的情况下获得一致的部分的信息?
假设我能做到这一点,我只是打算使用集群,其中有几个进程以上传到AWS的速度完成流。如果这似乎是并行工作的错误方式,我希望有一些建议。
4条答案
按热度按时间zqry0prt1#
如果没有其他问题,您可以手动使用
fs.open()
、fs.read()
和fs.close()
。示例:qrjkbowd2#
您可以考虑使用下面的代码片段,其中我们以1024字节的块读取文件
请注意:highWaterMark是用于块大小的参数希望这能有所帮助!
Web参考:https://stackabuse.com/read-files-with-node-js/Changing readstream chunksize显示器
ffscu2ro3#
基于mscdex's answer,这里有一个模块,它使用sync替代方法,并使用StringDecoder正确解析UTF-8
readableStream
的问题在于,为了使用它,你必须将整个项目转换为使用异步发射器和回调。如果你在编写一些简单的代码,比如nodejs中的一个小CLI,这就没有意义了。如果您还没有打印脚本,请使用以下.js转换代码:
3wabscal4#
我会建议像this这样的东西,因为
buffer.slice
已经过时了,对我来说,它在阅读大的pdf文件时有问题。