Suave.IO中的多数据发布数据中的处理Binary(excel)文件

时间:2018-11-05 19:13:22

标签: f# suave

我正在尝试构建一个简单的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),在处理二进制数据时可能需要特殊处理。

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

首先感谢所有。

1 个答案:

答案 0 :(得分:1)

问题似乎是编码之一。我正在使用python的request接口进行测试,默认情况下,文件被编码为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文件而不会损坏。