Artifactory cURL 下载 returns 存储库中存在 Artefact 文件时出现 404 File Not Found 错误
Artifactory cURL download returns 404 File Not Found error when artefact file exists in repository
我正在使用 Artifactory 在我的 CICD 管道中构建工件存储。
我在 PowerSHell 脚本中使用 cURL API 调用编写了工件推送到存储库的脚本:
curl.exe -H "X-JFrog-Art-Api: $apiKey" -X PUT $repoUrl -T $artifactFilePath
执行成功,工件文件按预期存放在指定的 Artifactory 存储库中。
稍后,我尝试使用以下 cURL API 调用下载相同的工件文件:
curl.exe -H "X-JFrog-Art-Api: $apiKey" -X GET $artifactUrl
尽管我可以浏览 Artifactory GUI 并清楚地看到子存储库中的工件文件,但执行 GET 请求 returns:
{
"errors" : [ {
"status" : 404,
"message" : "File not found."
} ]
}
我已经检查并仔细检查了他的存储库路径是否正确(它与初始上传请求中的路径一致)。
我对每个请求都使用了相同的 API 密钥,并确认关联的功能 ID 在存储库中具有读取、写入、注释和删除权限。
我已经处理这个问题几个小时了,但到目前为止还无法确定或解决问题。欢迎就此问题提供见解或建议。
更新:
执行 cURL 请求,使用 '-v- 开关进行详细输出 returns:
- Connected to www.[Artifactory URL].net (169.177.244.86) port 443 (#0)
- schannel: SSL/TLS connection with www.[Artifactory URL].net port 443 (step 1/3)
- schannel: checking server certificate revocation
- schannel: sending initial handshake data: sending 201 bytes...
- schannel: sent initial handshake data: sent 201 bytes
- schannel: SSL/TLS connection with www.[Artifactory URL].net port 443 (step 2/3)
- schannel: failed to receive handshake, need more data
- schannel: SSL/TLS connection with www.[Artifactory URL].net port 443 (step 2/3)
- schannel: encrypted data got 2415
- schannel: encrypted data buffer: offset 2415 length 4096
- schannel: sending next handshake data: sending 126 bytes...
- schannel: SSL/TLS connection with www.[Artifactory URL].net port 443 (step 2/3)
- schannel: encrypted data got 290
- schannel: encrypted data buffer: offset 290 length 4096
- schannel: SSL/TLS handshake complete
- schannel: SSL/TLS connection with www.[Artifactory URL].net port 443 (step 3/3)
- schannel: stored credential handle in session cache
GET /[Artifactory repo]/[Artifactory repo path]/[artifact file name].txt HTTP/1.1
Host: www.[Artifactory URL].net
User-Agent: curl/7.55.1
Accept: /
X-JFrog-Art-Api: [API key]
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0 0
0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0 0 0 0
0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:05 --:--:--
0 0 0 0 0 0 0 0 0 --:--:-- 0:00:06
--:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:07 --:--:-- 0
- 无用
- schannel:客户端想要读取 102400 字节
- 频道:encdata_buffer 调整大小 103424
- schannel:加密数据缓冲区:偏移量0长度103424
- schannel: 加密数据得到1144
- schannel:加密数据缓冲区:偏移量1144长度103424
- schannel:解密数据长度:1115
- schannel:已添加解密数据:1115
- schannel:缓存的解密数据:偏移量 1115 长度 102400
- schannel:加密数据缓冲区:偏移量0长度103424
- schannel:解密数据缓冲区:偏移量1115长度102400
- 频道:schannel_recv 清理
- schannel:解密数据返回1115
- schannel:解密数据缓冲区:偏移量 0 长度 102400 < HTTP/1.1 200 OK < 日期:2020 年 2 月 19 日,星期三 17:04:58 GMT < 内容类型:
text/plain <内容长度:3 <连接:保持活动状态 <服务器:
Artifactory/6.16.0 < X-Artifactory-Id:
d9260ad7ca1d26ab34fdd4717e47fdd9abc8e83f < X-Artifactory-Node-Id:
prodnode3 < Last-Modified:2020 年 1 月 23 日星期四 15:30:10 GMT < ETag:
7744ffc8156c74a9ce68f9cc621ac37624549928 < X-校验和-Sha1:
7744ffc8156c74a9ce68f9cc621ac37624549928 < X-校验和-Sha256:
b4fae8fae2070cbb6c52c22baf32eb1995be678f93e760dfddb60b166bd1a90f <
X-Checksum-Md5:807dfcc396f827846e9631b735c7e808 <接受范围:
bytes < X-Artifactory-Filename: [工件文件名].txt <
Content-Disposition:附件; filename="[工件文件名].txt";
filename*=UTF-8''[工件文件名].txt < X-Frame-Options: DENY <
X-Content-Type-Options: nosniff < X-XSS-Protection: 1;模式=块 <
严格传输安全:max-age=31536000;包括子域;
预加载<内容安全策略:默认源'self';脚本源
'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 数据:;样式源
'self' 'unsafe-inline';字体源 'self' 数据:
https://themes.googleusercontent.com; object-src 'none' < { [3 字节
数据] 100 3 0 3 0 0 0 0 --:--:-- 0:00:08
--:--:-- 0100 3 0 3 0 0 0 0 --:--:-- 0:00:08 --:--:-- 0
- 与主机 www.[Artifactory URL].net 的连接 #0 完好无损
块引用
最初的 404 问题显然是由于我的工件 URL 在原始 cURL API 调用中的错误。
上面的日志显示 return 在纠正 URL 之后的调用。即使使用正确的工件路径,文件似乎也没有按预期下载。
注意,上面verbose call log中的'dud'是文本文件的内容,表示找到文件并成功读取。
最后,添加指定文件名的“--output”开关导致工件文件下载成功。
我正在使用 Artifactory 在我的 CICD 管道中构建工件存储。
我在 PowerSHell 脚本中使用 cURL API 调用编写了工件推送到存储库的脚本:
curl.exe -H "X-JFrog-Art-Api: $apiKey" -X PUT $repoUrl -T $artifactFilePath
执行成功,工件文件按预期存放在指定的 Artifactory 存储库中。
稍后,我尝试使用以下 cURL API 调用下载相同的工件文件:
curl.exe -H "X-JFrog-Art-Api: $apiKey" -X GET $artifactUrl
尽管我可以浏览 Artifactory GUI 并清楚地看到子存储库中的工件文件,但执行 GET 请求 returns:
{
"errors" : [ {
"status" : 404,
"message" : "File not found."
} ]
}
我已经检查并仔细检查了他的存储库路径是否正确(它与初始上传请求中的路径一致)。 我对每个请求都使用了相同的 API 密钥,并确认关联的功能 ID 在存储库中具有读取、写入、注释和删除权限。
我已经处理这个问题几个小时了,但到目前为止还无法确定或解决问题。欢迎就此问题提供见解或建议。
更新:
执行 cURL 请求,使用 '-v- 开关进行详细输出 returns:
- Connected to www.[Artifactory URL].net (169.177.244.86) port 443 (#0)
- schannel: SSL/TLS connection with www.[Artifactory URL].net port 443 (step 1/3)
- schannel: checking server certificate revocation
- schannel: sending initial handshake data: sending 201 bytes...
- schannel: sent initial handshake data: sent 201 bytes
- schannel: SSL/TLS connection with www.[Artifactory URL].net port 443 (step 2/3)
- schannel: failed to receive handshake, need more data
- schannel: SSL/TLS connection with www.[Artifactory URL].net port 443 (step 2/3)
- schannel: encrypted data got 2415
- schannel: encrypted data buffer: offset 2415 length 4096
- schannel: sending next handshake data: sending 126 bytes...
- schannel: SSL/TLS connection with www.[Artifactory URL].net port 443 (step 2/3)
- schannel: encrypted data got 290
- schannel: encrypted data buffer: offset 290 length 4096
- schannel: SSL/TLS handshake complete
- schannel: SSL/TLS connection with www.[Artifactory URL].net port 443 (step 3/3)
- schannel: stored credential handle in session cache
GET /[Artifactory repo]/[Artifactory repo path]/[artifact file name].txt HTTP/1.1 Host: www.[Artifactory URL].net User-Agent: curl/7.55.1 Accept: / X-JFrog-Art-Api: [API key] 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:05 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:06 --:--:-- 0 0 0 0 0 0 0 0 0 --:--:-- 0:00:07 --:--:-- 0
- 无用
- schannel:客户端想要读取 102400 字节
- 频道:encdata_buffer 调整大小 103424
- schannel:加密数据缓冲区:偏移量0长度103424
- schannel: 加密数据得到1144
- schannel:加密数据缓冲区:偏移量1144长度103424
- schannel:解密数据长度:1115
- schannel:已添加解密数据:1115
- schannel:缓存的解密数据:偏移量 1115 长度 102400
- schannel:加密数据缓冲区:偏移量0长度103424
- schannel:解密数据缓冲区:偏移量1115长度102400
- 频道:schannel_recv 清理
- schannel:解密数据返回1115
- schannel:解密数据缓冲区:偏移量 0 长度 102400 < HTTP/1.1 200 OK < 日期:2020 年 2 月 19 日,星期三 17:04:58 GMT < 内容类型: text/plain <内容长度:3 <连接:保持活动状态 <服务器: Artifactory/6.16.0 < X-Artifactory-Id: d9260ad7ca1d26ab34fdd4717e47fdd9abc8e83f < X-Artifactory-Node-Id: prodnode3 < Last-Modified:2020 年 1 月 23 日星期四 15:30:10 GMT < ETag: 7744ffc8156c74a9ce68f9cc621ac37624549928 < X-校验和-Sha1: 7744ffc8156c74a9ce68f9cc621ac37624549928 < X-校验和-Sha256: b4fae8fae2070cbb6c52c22baf32eb1995be678f93e760dfddb60b166bd1a90f < X-Checksum-Md5:807dfcc396f827846e9631b735c7e808 <接受范围: bytes < X-Artifactory-Filename: [工件文件名].txt < Content-Disposition:附件; filename="[工件文件名].txt"; filename*=UTF-8''[工件文件名].txt < X-Frame-Options: DENY < X-Content-Type-Options: nosniff < X-XSS-Protection: 1;模式=块 < 严格传输安全:max-age=31536000;包括子域; 预加载<内容安全策略:默认源'self';脚本源 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 数据:;样式源 'self' 'unsafe-inline';字体源 'self' 数据: https://themes.googleusercontent.com; object-src 'none' < { [3 字节 数据] 100 3 0 3 0 0 0 0 --:--:-- 0:00:08 --:--:-- 0100 3 0 3 0 0 0 0 --:--:-- 0:00:08 --:--:-- 0
- 与主机 www.[Artifactory URL].net 的连接 #0 完好无损 块引用
最初的 404 问题显然是由于我的工件 URL 在原始 cURL API 调用中的错误。
上面的日志显示 return 在纠正 URL 之后的调用。即使使用正确的工件路径,文件似乎也没有按预期下载。 注意,上面verbose call log中的'dud'是文本文件的内容,表示找到文件并成功读取。
最后,添加指定文件名的“--output”开关导致工件文件下载成功。