f# - 在 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),当它是二进制数据时可能需要特殊处理。
我应该如何处理二进制文件的上传?
提前谢谢大家。
解决方案
看起来问题是编码之一。我正在使用 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 文件而不会损坏。
推荐阅读
- python - 拆分名字和姓氏正则表达式
- javascript - 如何修复这个仅在 wordpress 网站上不起作用的 javascript onmousemove
- cuda - CUDA可以并行存储8个无符号字符数据吗
- python - Pandas 在布尔索引匹配周围获得 N 行
- php - 我想除以整数类型并四舍五入现有的小数点
- javascript - 使用 javascript 和 CSS 绘制曲线上的 sin 和 cos 动画
- typescript - 如何使用 cdk 获取帐户 ID
- omnet++ - 为什么 INET Aodv 路由在 OMNeT++ 中不起作用?
- sharepoint - 为什么我不能将 SharepointForm1 重命名为其他名称?
- keystore - 我应该为每个要加密的字符串创建一个新的 SecretKey 吗?