通过传真SOAP API添加附件时页面出现乱码点的问题排查
问题:Make.com发送SOAP API传真时附件显示乱码
我正在使用Make.com发送SOAP API请求程序化发送传真,尝试通过二进制数据转base64编码的方式在XML请求体中添加附件。我用以下代码编码:
let bytes = new TextEncoder().encode(input); let base64String = btoa(bytes); return base64String
将编码后的字符串嵌入SOAP请求的XML中(XML格式正确无缩进):
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"> <Body> <sendFax xmlns="http://ws.xm.faxserver.com/"> <userId xmlns="">testuser@test.com</userId> <subject xmlns="">Test fax from Make</subject> <comment xmlns="">This is a test fax sent from Make</comment> <!-- Optional --> <recipient xmlns=""> <number>1234567890</number> <name>Test recipient</name> <company>Test company</company> </recipient> <!-- Optional --> <attachment xmlns=""> <name>[string]</name> <contents>[base64Binary] THIS IS WHERE I INCLUDE THE ENCODED DATA</contents> </attachment> <!-- Optional --> <senderInfo xmlns=""> <salutation>To whom it may concern</salutation> <firstName>Justin</firstName> <lastName>Domingo</lastName> <title>ECM Technician</title> <email>jdomingo@ubeo.com</email> <company>UBEO</company> </senderInfo> <isCommentTypeHtml xmlns="">true</isCommentTypeHtml> </sendFax> </Body> </Envelope>
请求返回200,但传真附件显示乱码(仅显示一堆乱码点)。试过多种编码方式、直接嵌入二进制数据都无效,请问问题出在哪?
核心问题:二进制文件的编码方式错误
你用TextEncoder.encode(input)处理二进制文件是错误的——TextEncoder仅用于将文本字符串转成UTF-8编码的字节数组,如果input是二进制文件(比如PDF、图片等),这种方式会破坏原始二进制数据,导致转base64后无法还原出正确的文件内容。
正确的处理步骤
1. 在Make.com中直接获取文件的base64编码
Make.com自带处理文件的工具,不需要手动写编码脚本:
- 如果你的文件是从Make的文件模块(比如Google Drive、本地文件上传)获取的,直接使用文件的
Base64 content属性,这个属性已经是正确的base64编码结果,无需二次处理。 - 如果你必须用脚本处理,确保输入的是原始二进制数据而非字符串,改用
btoa()直接处理二进制数据的字符串表示(注意:Make的环境中,处理二进制文件优先调用内置文件属性,避免手动编码出错)。
2. 修正XML中的base64格式
确保XML的<contents>标签中:
- 移除
[base64Binary]占位符,直接填入纯base64字符串即可。多数SOAP API要求base64Binary类型的值就是纯编码字符串,不需要前缀标识。 - 确认XML没有对base64字符串进行额外转义(比如把
+转成+、/转成/),Make.com在嵌入变量到XML时如果开启了自动转义,需关闭或确保转义符合XML规范。
3. 验证base64的正确性
把你生成的base64字符串复制到在线解码工具(或本地用atob()解码),检查是否能还原出原始文件:
- 如果解码后文件损坏,说明编码环节出错,回到第一步重新处理。
- 如果解码后文件正常,检查附件文件名后缀是否正确(比如
<name>里要写test.pdf而非[string],确保传真服务器能识别文件类型)。
额外排查点
- 确认传真API的
sendFax接口对附件的要求:是否支持你发送的文件类型(比如仅支持PDF、TIFF),是否有文件大小限制。 - 检查SOAP请求的
Content-Type头是否正确,应设置为text/xml; charset=utf-8或application/soap+xml; charset=utf-8,避免字符编码问题。
内容的提问来源于stack exchange,提问作者Justin Domingo
相关产品推荐
相关产品推荐

