如何分别解析多部分字段/文件数据?


9

我想两次解析一个多部分的表单:一次获取传入的字段,然后解析文件上传。

我正在尝试在Node应用程序中保持适当的关注点分离:

  • 控制器负责处理传入字段。
  • 模型负责上传文件的逻辑。

我需要将字段数据传递到模型中以创建新实例,因此在文件上传开始之前,字段数据需要可用。

当前,每个form.parse()或等效函数都将字段和文件解析在一起。示例:一起req.pipe(busboy)处理文件和字段。

我已经检查了节点多方,强大,busboy,multer之类的模块。似乎没有人对此有解决方案。

我想要实现的示例在这里:https : //stackoverflow.com/questions/22336177/node-js-busboy-parse-fields-and-files-seperatly

这有可能吗?


2
等待...所以您将要让模型负责逻辑和控制?
马修·马克·米勒

不错,通常情况下,架构很难混合考虑。这是2年前的事情,所以当我问这个问题时,我不完全记得我正在解决什么问题,但是我确实记得我希望保存逻辑成为Mongoose模式对象的一部分。通过在模型上使用猫鼬方法,我可以轻松地从应用程序中的任何位置进行保存。回顾过去,我认为save方法的通用性不足以成为模型方法,可能应该将其保留为单独的服务方法。mongoosejs.com/docs/guide.html
斯科特

1
大声笑我还没有意识到这有多大...它以某种方式流到了我的“需要回答”队列的顶部。是的,我认为将持久性操作与要持久存储的数据分开是正确的,尤其是当那些对象可能正在二维传输数据时。可以很容易地弄乱和保留控制器外部的东西。
马修·马克·米勒

@Scott “这是2年前的事,所以我不完全记得当我问这个问题时我正在解决什么问题” -然后您可以考虑删除此问题,因为根本不可能回答。
蒂莫西·特拉克

Answers:


1

我想回答这个问题:

是否可以先读取多部分字段头的内容?

当我看一下由rfc组成多部分时,会看到以下示例:

From:  Nathaniel Borenstein <nsb@bellcore.com> 
To: Ned Freed <ned@innosoft.com> 
Subject: Formatted text mail 
MIME-Version: 1.0 
Content-Type: multipart/alternative; boundary=boundary42 


--boundary42 
Content-Type: text/plain; charset=us-ascii 

...plain text version of message goes here.... 

--boundary42 
Content-Type: text/richtext 

.... richtext version of same message goes here ... 
--boundary42 
Content-Type: text/x-whatever 

.... fanciest formatted version of same  message  goes  here 
... 
--boundary42-- 

我注意到类似标题的标题Content-Type位于主体部分之间。因此,我得出结论,不能将所有标头放在所有主体之前。

现在您的问题:

我想两次解析一个多部分的表单:一次获取传入的字段,然后解析文件上传。

这取决于您“解析”的意思。读取HTTP消息以了解结束时间时涉及一些解析。最后--在末尾有一个附加项:

--boundary42--

两次解析的想法:

  • 我得出结论,一个人应该能够从套接字复制整个答案并在以后进行解析。
  • 您可以在文件正文之前读取文件的标题,但不能读取所有文件的所有标题。

这有可能吗?

是的,在某些情况下(当文件是最后上传的文件时)是可能的。我不知道您是否普遍可能需要什么,因为我不确定您到底想做什么。

我希望这可以使事情澄清。如果这不是一个完整的答案,或者您不喜欢这个,请告诉我们原因,因为这对于其他尝试回答该问题的人可能是有价值的反馈。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.