You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift:经base64编码后上传至Frappe实例的文件出现损坏故障咨询

问题排查及修复方案

1 核心错误:base64字符串处理逻辑异常

你当前对base64编码结果的两处修改都是多余且会直接导致文件损坏的问题:

  • Swift原生的base64EncodedString()方法已经会根据数据长度自动补充正确的=填充符,你手动在末尾额外拼接==会导致base64字符串末尾出现无效字符,服务端解码时会生成错误的二进制数据,就是你看到的文件乱码、无法打开的核心原因。
  • 你手动将+替换为%2B属于重复编码:URLQueryItem在生成查询字符串时会自动对特殊字符做百分号转义,你提前转义后,URLQueryItem会把转出来的%再次转义为%25,最终服务端拿到的base64串里的+会变成%2B,直接导致解码失败。

对应修复代码如下:

// 移除多余的替换和手动填充逻辑即可
let fileAsString = attachment.base64EncodedString()

2 次要问题:文件名写死导致非XML文件格式识别错误

你当前代码里写死了文件名为testFile.xml,如果上传的是PDF、图片等其他格式的文件,下载后文件后缀依然为xml,会导致系统无法用正确的程序打开,建议根据上传的文件类型动态生成文件名,示例如下:

// 可额外传入文件名参数,或者从原文件URL中读取完整文件名
URLQueryItem(name: FRAPPE_FILENAME, value: "实际文件名.对应后缀")

验证方法

修改后可先本地打印生成的fileAsString,和服务端接收到的FRAPPE_DATA参数值做对比,确认两者完全一致后,再将base64串通过解码工具验证是否能还原出正确的原文件内容,确认无误后再执行上传测试即可。


内容的提问来源于stack exchange,提问作者Andy P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:27:03