使用CURL上传文件至Perfecto失败,overwrite参数格式错误求助
排查并解决Perfecto仓库APK上传失败问题
从你遇到的错误提示和脚本代码来看,核心问题出在URL的语法错误上,咱们一步步拆解并修复:
问题分析
虚拟机返回的错误信息已经给出了明确线索:
{"errorMessage":"Failed to upload repository item - Value true) for overwrite parameter is not a valid boolean value."}
这里overwrite参数的值变成了true),明显多了个多余的右括号;另外URL里的&是HTML实体编码字符,在Shell脚本中会被当成普通字符串传递,导致服务器无法正确解析参数分隔。
修复步骤
1. 修正URL的语法错误
把URL里的两个问题点改掉:
- 移除末尾多余的右括号
) - 将
&替换成Shell中合法的参数分隔符&
修正后的完整脚本代码如下:
# 先确保APK文件下载完成 wget -c https://example.net -O abc.apk # 上传部分的修正代码 source="abc.apk" dest="abc.apk" securityToken="Actual Token" # 修正后的URL:移除多余括号,替换&为& url="https://another.com/services/repositories/GROUP:abc/${dest}?operation=upload&securityToken=${securityToken}&overwrite=true" curl -X POST -T "$source" "$url"
2. 验证修正效果
执行脚本前,可以先打印出URL确认格式是否正确:
echo $url
正常输出的URL应该是类似这样的(无多余括号,参数用&清晰分隔):https://another.com/services/repositories/GROUP:abc/abc.apk?operation=upload&securityToken=Actual Token&overwrite=true
3. 额外验证点(若仍有问题)
如果修正后还是无法上传,可以检查:
- 确认
abc.apk文件是否下载完整:用ls -l abc.apk查看文件大小,或者尝试解压APK确认没有损坏 - 确认
securityToken是否正确,没有拼写错误或特殊字符(如果包含特殊字符,需要用引号包裹或进行URL编码)
错误原因说明
- 多余的右括号:原本URL末尾的
)是手误添加的,导致overwrite参数值变成true),不符合Perfecto要求的布尔值格式(只能是true或false),所以服务器直接拒绝了请求。 - HTML转义字符
&:&是HTML中用来表示&的转义字符,但在Shell脚本中,直接写&会被当成字符串的一部分传递给服务器,导致服务器无法正确识别参数的分隔,进而引发解析错误。
内容的提问来源于stack exchange,提问作者PAA
相关产品推荐
相关产品推荐

