我的API需要处理文件上传以及邮件中的附件文件。邮件通过Sendgrid的邮件解析功能路由到我的API。
这两种方法的结果都是一个多部分的表单。在电子邮件的情况下,字段是 "to","from "等。在普通的上传表单中,我决定字段。
我不想处理本地的临时文件,所以理想情况下,我只需要把文件流管到S3。我已经实现了这一点,而且效果很好。但也有一些边缘情况。
在我把文件管到S3之前,我想确保邮件是合法的。我通过检查发件人和收件人的地址来做到这一点。不幸的是,multipart forms并没有为字段文件指定一个特定的顺序,而是规范说要保留原始表格的顺序。
问题是
偶尔我收到了来自Sendgrid解析的电子邮件,其中字段在文件之后到达。
因此,为了通过表单字段来验证发件人,我可能需要在等待字段数据时缓冲文件。这似乎是一个相当愚蠢的处理传入文件的方式,即在我甚至不知道是否应该处理它们之前就开始处理store文件。
所有发送到指定子域的邮件都会从Sendgrid转发到我的服务器。这意味着,我可能会被邮件淹没,我必须完全处理这些邮件(包括缓冲文件),然后才能决定邮件是否合法。
疑问
我是不是误会了什么?
有些邮件客户端会推迟下载附件。这是怎么做到的?
我使用的工具是
node.js
多方
Sendgrid解析
我终于明白了这个问题。简单的答案是,一个多部分的形式是一个单一的流。如果文件在流中的字段之前出现,我必须在等待字段的同时缓冲文件。至少如果我需要字段的信息来处理文件的话。
我想,能够推迟下载附件的电子邮件客户端必须依靠一个解析电子邮件并缓冲文件的服务器。
感谢Doug Wilson在 https:/github.compillarjsmultiparty。 为澄清这一点。