我正在尝试构建一个简单的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),在处理二进制数据时可能需要特殊处理。
我应该如何处理二进制文件的上传?
首先感谢所有。
答案 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文件而不会损坏。