Node.js:提取大型存档导致崩溃"/>
Node.js:提取大型存档导致崩溃
我从事一个 React 项目,该项目集成了 Potree 以在在线查看器中显示大型点云。 我被困在管理员应该向服务器上传新点云的部分。
Potree 的点云基本上是一个包含 HTML 文件和嵌套文件夹的文件夹,其中包含点云所需的所有文件。
Potree 的典型点云文件夹结构
测试点云 l testPointCloud.html L 点云 l 测试点云 l hierarchy.bin l 日志.txt l 元数据.json 八叉树.bin
文件 octree.bin 包含实际的点云并且可以非常大(通常为 500 MB 到 1.5 GB)
我的想法是管理员将testPointCloud根文件夹压缩并通过专用后台页面上传到服务器。这部分工作正常。
服务器(Node.js 的 Express 框架)通过 API 正确接收存档。但是我无法正确提取存档。
如果我将存档作为 .ZIP 上传,解压将在到达“octree.bin”文件后停止,忽略存档的其他文件。
如果我将档案作为 .TAR 上传,我可以正确提取档案,但在提取过程中,我的 Express 服务器将停止并在提取完成后恢复。
这是我最接近目标的提取代码:
const decompress = require('decompress');
exports.createPointCloud = (req, res, next) => {
const fileName = req.file.filename.split('.')[0].replace(/[^a-z0-9_.\-\s]/gi, '_').replace(/\s+/g, '_');
decompress(req.file.path, "potree/" + fileName).then(files => {
// I add the point cloud to the database here
});
};
我尝试使用不同的库来管理档案(例如 adm-zip 或解压缩),但我得到了类似的结果。 阅读一些类似的问题(比如how to read and process large zip files in node-js),我似乎明白我应该使用流功能和管道方法来避免吃掉我服务器的所有 RAM 资源,但我不能'不知道如何使用它。
请注意,我是一个完全业余的开发人员,这是一个个人项目。有可能我在管理点云上传方面完全走错了方向。在这种情况下,谢谢你带我走向正确的方向。
问候;
回答如下:更多推荐
Node.js:提取大型存档导致崩溃
发布评论