Power Automate POST HTTP动作发送文件时文件损坏问题求助
问题背景
通过Power Automate实现SharePoint文件夹文件自动上传至目标Web API,已逆向得到API请求体结构,但上传后文件始终损坏。服务器返回状态正常、文件大小正确且error=0,尝试多种方法均未解决。
请求体结构
------WebKitFormBoundaryUfW1N2vGAB9oEPC1 Content-Disposition: form-data; name="id_composition" @{variables('id_compo')} ------WebKitFormBoundaryUfW1N2vGAB9oEPC1 Content-Disposition: form-data; name="date_upd" @{body('Current_time')} ------WebKitFormBoundaryUfW1N2vGAB9oEPC1 Content-Disposition: form-data; name="id_client" 87 ------WebKitFormBoundaryUfW1N2vGAB9oEPC1 Content-Disposition: form-data; name="id_compo_detail" @{variables('id_compo_detail')} ------WebKitFormBoundaryUfW1N2vGAB9oEPC1 Content-Disposition: form-data; name="titre" <p></p> ------WebKitFormBoundaryUfW1N2vGAB9oEPC1 Content-Disposition: form-data; name="files"; filename="" Content-Type: application/octet-stream ------WebKitFormBoundaryUfW1N2vGAB9oEPC1 Content-Disposition: form-data; name="sous_titre" ------WebKitFormBoundaryUfW1N2vGAB9oEPC1 Content-Disposition: form-data; name="color_text" #000000 ------WebKitFormBoundaryUfW1N2vGAB9oEPC1 Content-Disposition: form-data; name="css1" ------WebKitFormBoundaryUfW1N2vGAB9oEPC1 Content-Disposition: form-data; name="actif" 1 ------WebKitFormBoundaryUfW1N2vGAB9oEPC1 Content-Disposition: form-data; name="temps_affichage" 10 ------WebKitFormBoundaryUfW1N2vGAB9oEPC1 Content-Disposition: form-data; name="file"; filename="@{triggerBody()?['{FilenameWithExtension}']}" Content-Type: image/png @{body('Get_file_content')} ------WebKitFormBoundaryUfW1N2vGAB9oEPC1--
已完成排查
- 确认
files字段为空白的application/octet-stream类型,file字段以二进制格式发送(通过Firefox开发者工具验证) - 验证流发送的是二进制数据,Base64字符串与原文件一致
- 尝试过嵌入HTML、更换JPG格式,均无效
解决方法
1. 改用二进制输出的文件获取动作
Power Automate的Get file content默认返回Base64编码内容,即使你认为是二进制,实际可能被转码。替换为Get file content using path,并在动作设置中开启Include binary content选项,确保获取原始二进制流。
2. 避免手动拼接请求体,用自动构造multipart/form-data
放弃手动编写请求体,使用Send an HTTP request动作的自动构造功能:
- 在
Headers中设置Content-Type为multipart/form-data(Power Automate会自动生成合法的边界符) - 在
Body的form-data模式下添加所有字段:- 普通字段(如
id_composition、date_upd等)直接填入变量或固定值 files字段设为Text类型,值留空file字段选择File类型,File content选上述二进制流,File name用触发的文件名变量
- 普通字段(如
3. 检查换行符格式
若必须手动拼接请求体,确保所有换行使用CRLF(\r\n),而非LF(\n)。Power Automate中字符串换行默认是LF,会导致multipart结构解析错误,损坏文件。可以用concat()函数手动添加\r\n来控制换行。
4. 验证二进制流类型
通过Compose动作输出文件内容的类型,若显示为String则说明是Base64编码,必须切换到二进制输出的动作。
内容的提问来源于stack exchange,提问作者user29612481
相关产品推荐
相关产品推荐

