F# 在Suave.IO中处理多数据Post数据中的二进制(excel)文件

F# 在Suave.IO中处理多数据Post数据中的二进制(excel)文件,f#,suave,F#,Suave,我正在尝试构建一个简单的Suave.IO应用程序来集中发送电子邮件。目前,该应用程序有一个端点,该端点将主题、正文、收件人、附件和发件人作为表单数据,并将它们从日志电子邮件帐户转换为EWS电子邮件 在大多数情况下,一切都按预期工作,但当其中一个附件是excel文件时,我会遇到文件损坏问题。在这些情况下,文件似乎已损坏 目前,我正在筛选request.multipartFields,只筛选标记为附件文件的字段,然后执行以下操作: for (fileField: (string*string)) i

我正在尝试构建一个简单的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会自动将所有多部分字段编码为(string*string),当它是二进制数据时,可能需要特殊处理

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


提前感谢大家。

看来问题在于编码。我使用python的请求接口进行测试,默认情况下,文件编码为多部分/表单数据。通过为每个文件指定特定的编码,我能够帮助服务器将传入的数据识别为文件

而不是

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文件而不会损坏

我不知道你所说的“标记为附件的那些”是什么意思;通常情况下,您会在字段
files
下找到二进制文件,请参见是,通常情况下是这样,但如果您也发布了表单数据,则它们都会在请求中结束。多部分字段。。。我正在使用python的请求库,并为文件和数据参数传递参数。是否使用“multipart/form data”内容类型进行编码?是的。这就是我正在使用的