multer,multiparty和connect-multiparty + Nodejs之间的区别

Posted

技术标签:

【中文标题】multer,multiparty和connect-multiparty + Nodejs之间的区别【英文标题】:Difference between multer, multiparty and connect-multiparty + Nodejs 【发布时间】:2017-02-27 04:23:09 【问题描述】:

我是 Node 世界的新手。

用例:

有一个在 Angular 前端上传 XLS 文件的简单场景, 在 Node 上处理它们,进行一些操作,然后将 JSON 保存到 Mongo DB。

从 Angular 接收文件后,我正在寻找在 Node 上解析/处理文件的最佳方法,然后发现了有关这些著名节点模块的文章 - multermultipartyconnect-multiparty

每一篇文章都解释了如何使用相应的模块,却找不到任何一个告诉什么时候该使用哪个

我发现multer 主要用于当您尝试将文件保存在磁盘存储上并且这不足以满足我的用例。

所以我应该忽略multer 还是实际使用它?

我应该什么时候真正使用multipartyconnect-multiparty

【问题讨论】:

【参考方案1】:

您可以将可用的文件处理库分为三类:它们是独立的还是特定于 Express.js 的,它们是存储中间文件还是使用流,以及中间文件是存储在临时目录还是内存中。

p>

像 busboy 这样的独立解析器可以与 Express.js 一起使用,也可以不与 Express.js 一起使用。另一方面,Express.js 中间件通过添加req.files 来扩充请求对象,您可以方便地访问文件。一些实现将中间文件存储在临时目录或内存中。其他允许您访问上传的文件内容流,而不会破坏服务器的内存或硬盘。

根据您的情况,提出这些问题以确定哪个库最适合您。

是否需要 Express.js? 是否可以保存中间文件,还是要流式传输文件? 如果保存中间文件没问题,您希望它们在内存中还是在硬盘中?

然后使用此决策树从最常用的文件上传处理库列表中选择一个。决策树来自文章:

Choose between Formidable, Busboy, Multer and Multiparty for processing file uploads

【讨论】:

很好的答案,但是 mutliparty 在这个流程图中的位置是什么? Followup - 参考原始文章,看起来我上面问题的答案是多方与 busboy 几乎属于同一类别,除了 busboy 更快,那么为什么要使用 Multiparty 呢? (我不一定同意速度是唯一的标准(易用性、文档、安全性等呢?),但这解释了为什么它没有出现在流程图中。)【参考方案2】:

这个问题列出了一些选项:

How could I upload files in ExpressJS 4.x

有模块可以直接解析多格式数据,并在这些模块上构建中间件。

Github stars 直接解析的前三个模块是node-formidable (3376)、busboy (814)、node-multiparty (557)。

***中间件是 multer(建立在 busboy 之上,2515 颗星)。 connect-multiparty 有一个说明建议不要使用它。 connect-busboy 已经四年没有更新了。

基于此,如果您需要 Express 中间件,我建议使用 node-formidable、busboy 或 multer。

还要注意 multer 有一个 MemoryStorage 内存存储引擎。

【讨论】:

嗨,西蒙。我知道我迟到了,但强大的仍然更新和使用?看起来 multer 现在在所有其他“图像上传”教程中都在流行。强大的仍然可以安全使用吗?谢谢 不要真正关注这一点,但看看github.com/felixge/node-formidable/issues/412,看起来他们刚刚添加了几个维护者,非常强大。我想它会正常工作的。 Multer 似乎更新更频繁(最后一次更新是 19 天前),但它是中间件而不是直接解析器。

以上是关于multer,multiparty和connect-multiparty + Nodejs之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

multiparty

nodejs之multiparty插件使用简析

使用formidable & multiparty实现文件上传

nodejs+multiparty 文件上传

使用 multer 和 express 上传图片

js模拟发送 FormData数据