首页 > 解决方案 > 在 Suave.IO 中处理多数据 Post 数据中的二进制 (excel) 文件

问题描述

我正在尝试构建一个简单的 Suave.IO 应用程序来集中发送电子邮件。目前,该应用程序有一个端点,它将主题、正文、收件人、附件和发件人作为表单数据,并将它们转换为来自日志电子邮件帐户的 EWS 电子邮件消息。

在大多数情况下,一切都按预期工作,但是当附件之一是 excel 文件时,我会遇到文件损坏问题。在这些情况下,文件似乎已损坏。

目前,我将 request.multipartFields 过滤为仅标记为附件的文件,然后执行以下操作:

for (fileField: (string*string)) in fileFields do
            let fname = (fst fileField)
            let fpath = "uploadedFiles\\" + fname
            File.WriteAllBytes(fpath, Encoding.ASCII.GetBytes (snd fileField)) |> ignore

然后在发送之前将文件路径和附件名称馈送到 EWS 消息中。

同样,这似乎适用于除二进制附件之外的所有附件。Suave.IO 似乎自动将所有 multiPartFields 编码为 (string*string),当它是二进制数据时可能需要特殊处理。

我应该如何处理二进制文件的上传?

提前谢谢大家。

标签: f#suave

解决方案


看起来问题是编码之一。我正在使用 python 的请求接口进行测试,默认情况下,文件被编码为 multipart/form-data。通过为每个文件指定特定的编码,我能够帮助服务器将传入的数据识别为文件。

代替

requests.post(url, data=data, files={filename: open(filepath, 'rb')})

我需要成功

requests.post(url, data=data, files={filename: (filename, open(filepath, 'rb'), mimetypes.guess(filepath)})

使用第二个 python 脚本,文件最终出现在请求的文件部分,我能够保存 excel 文件而不会损坏。


推荐阅读