多部分形式,顺序 fields/files

Multipart form, order of fields/files

我的 API 需要处理文件上传以及电子邮件中的附件。电子邮件通过 Sendgrid 的邮件解析功能路由到我的 API。

这两种方法都会生成多部分表单。在电子邮件的情况下,字段是 "to"、"from" 等。在普通的上传表单中,我决定字段。

我不想处理本地临时文件,所以理想情况下我只是将文件流通过管道传输到 S3。我已经实施了这个并且效果很好。但也有边缘情况..

在将文件通过管道传输到 S3 之前,我想确保电子邮件是合法的。我通过检查发件人和收件人地址来做到这一点。不幸的是,多部分表单没有指定 fields/files 的特定顺序,而是规范说要保留原始表单的顺序。

问题

偶尔我会收到来自 Sendgrid 的电子邮件,解析字段在文件之后到达的位置。

因此,为了通过表单字段验证发件人,我可能需要在等待字段数据时缓冲文件。这似乎是一种非常愚蠢的处理传入文件的方法,即在我什至不知道是否应该处理它们之前就开始 process/store 个文件。

发送到指定子域的所有电子邮件都将从 Sendgrid 转发到我的服务器。这意味着我可能会被电子邮件淹没,在我决定电子邮件是否合法之前,我必须完全处理这些电子邮件(包括缓冲文件)。

问题

我是不是误会了什么?

一些电子邮件客户端推迟下载附件。这是怎么做到的?

我正在使用的工具

我终于明白了这一点。简单的答案是多部分表单是单个流。如果文件出现在流中的字段之前,我必须在等待字段时缓冲文件。至少如果我需要字段中的信息来处理文件。

我想能够延迟下载附件的电子邮件客户端必须依赖于解析电子邮件和缓冲文件的服务器。

感谢 https://github.com/pillarjs/multiparty 的 Doug Wilson 澄清了这一点。