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

时间:2016-10-18 03:28:33

标签: node.js express multipartform-data multer

是Node world的新手。

UseCase:

  

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

从Angular接收文件后,我正在搜索在Node上解析/处理文件的最佳方法,然后遇到有关这些着名节点模块的文章 - multermultiparty和{{ 1}}。

每篇文章都解释了如何使用相应的模块,找不到任何一个时使用哪一个。

我发现当您尝试将文件保存在磁盘存储上时,connect-multiparty主要用于我的用例。

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

我应该何时使用multermultiparty

2 个答案:

答案 0 :(得分:9)

此问题列出了一些选项:

How could I upload files in ExpressJS 4.x

有一些模块可以直接解析多种形式的数据,并表达基于这些的中间件。

Github明星直接解析的前三个模块是node-stridable(3376),busboy(814),node-multiparty(557)。

顶级中间件是multer(建立在busboy上,2515颗星)。 connect-multiparty有一个提示不要使用它的注释。 connect-busboy在四年内没有更新。

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

另请注意,multer有一个MemoryStorage内存存储引擎。

答案 1 :(得分:5)

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

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

根据您的情况,提出以下问题,以确定哪个图书馆最适合您。

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

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

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

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