1

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

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

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

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

问题

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

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

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

问题

我误解了什么吗?

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

我正在使用的工具

  • 节点.js

  • 多方

  • 发送网格解析

4

1 回答 1

1

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

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

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

于 2020-04-24T11:27:41.150 回答