GitHub Actions中curl命令上传带##标识的war包路径格式错误问题
问题根因
- URL 中的
#属于特殊的片段标识符,curl 发起请求时会自动截断#及之后的内容,不会发送给服务端,这就是直接写##上传后文件名被截断的原因。 - 之前尝试加反斜杠转义
#报错,是因为反斜杠不属于 URL 合法字符,服务端收到后识别路径不合法;直接全局替换#为%23没用是因为你把编码后的内容用在了本地文件名参数上,本地文件系统找不到对应文件。
解决方案
你定义的两个变量要严格区分职责,分别处理:
- 本地文件变量:直接保留原始带
##的文件名,不需要任何转义、编码,保证 curl 能找到本地待上传的文件。 - URL 拼接变量:把文件名里的每一个
#手动替换为 URL 编码值%23,不要加反斜杠。
修正后的代码如下:
run:| mvn install # 拼URL用的变量,把#替换为URL编码%23 FILE_TO_UPLOAD="ARTIFACTID%23%23VERSION.war" # 本地实际文件名,保留原始## FILE_TO_UPLOAD2="ARTIFACTID##VERSION.war" echo ${FILE_TO_UPLOAD} #for testing TARGET_URL="https://example.com/PATH/${FILE_TO_UPLOAD}" # 变量引用加双引号避免特殊字符解析问题 curl -u 'username:password' --upload-file "${FILE_TO_UPLOAD2}" "${TARGET_URL}"
内容的提问来源于stack exchange,提问作者4help2
相关产品推荐
相关产品推荐

