我正在使用下面的代码通过Artifactory的REST API上传文件。 我的问题是,当我通过GUI查看文件时,我收到此消息:
客户端未发布校验和值。如果您信任上传的 通过单击“修复”,您可以接受实际的校验和 校验和'按钮。
如何修复上传以使此消息消失?
如果我通过GUI上传文件,我不提供校验和值,那么为什么我在使用API时必须这样做呢?在使用API修复校验和时,我可以调用额外的函数吗?
我也看到了这个设置:https://www.jfrog.com/confluence/display/RTF20/Handling+Checksums 这可能与我的问题有关吗?
string inFilePath = @"C:\temp\file.ext";
string inUrl = @"domain.com/repoKey/";
string username = "username";
string apiKey = "apikey";
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes(username+":"+apiKey)));
using (var stream = File.OpenRead(inFilePath))
{
var response = client.PutAsync(inUrl + stream.Name, new StreamContent(stream));
using (HttpContent content = response.Result.Content)
{
string data = content.ReadAsStringAsync().Result;
}
}
}
更新
有三种类型的校验和和两组校验和组。
"checksums" : {
"sha1" : "94332c090bdcdd87bd86426c224bcc7dc1c5f784",
"md5" : "dcada413214a5bd7164c6961863f5111",
"sha256" : "049c671f48e94c1ad25500f64e4879312cae70f489edc21313334b3f77b631e6"
},
"originalChecksums" : {
"sha1" : "94332c090bdcdd87bd86426c224bcc7dc1c5f784",
"md5" : "dcada413214a5bd7164c6961863f5111"
}
checksums
- 由Artifactory计算
originalChecksums
- 是上传者提供的
当我使用API时,originalChecksums
组为空,我认为会在上面显示该消息。
答案 0 :(得分:5)
我使用artifactory-client-java库遇到同样的问题: - (
因此,在某些digging之后,您似乎需要:
对于您的C#示例,正确的解决方案是使用计算的校验和添加标题“X-Checksum-Sha1”。 如链接文档中所述,一个简单的curl示例是
curl -uadmin:password -T file.jar -H "X-Checksum-Sha1:c9a355147857198da3bdb3f24c4e90bd98a61e8b""http://localhost:8081/artifactory/libs-release-local/file.jar" -i
对于artifactory-client-java用户,简单的解决方法是添加到文档化的上传示例中:
java.io.File file = new java.io.File("fileToUpload.txt");
File result = artifactory.repository("RepoName").upload("path/to/newName.txt", file).doUpload();
另一个中间呼叫: bySha1Checksum():
java.io.File file = new java.io.File("fileToUpload.txt");
File result = artifactory.repository("RepoName").upload("path/to/newName.txt", file).bySha1Checksum().doUpload();
答案 1 :(得分:3)
@Arnaud Jeansen的回答是正确的。我以为我会与校验和共享我的bash / curl脚本以进行部署,以提供更多详细信息。
这是从Artifactory 6.2起最新的信息,以及撰写本文的日期。
# assume test2.zip is the file to upload in current directory
# calculate checksums
sha256=$(openssl dgst -sha256 test2.zip|sed 's/^SHA256.*= //')
sha1=$(openssl dgst -sha1 test2.zip|sed 's/^SHA.*= //')
# upload to Artifactory
curl -u"${ARTIFACTORY_USER}:${ARTIFACTORY_PASSWORD}" \
-sS -T test2.zip \
-H "X-Checksum-Sha256:${sha256}" -H "X-Checksum-Sha1:${sha1}" \
"http://${ARTIFACTORY_HOST}:8081/artifactory/REPO/path/test2.zip" \
> response
jq '.' < response
echo ''
结果工件不会在UI中显示有关校验和的警告。
答案 2 :(得分:1)
好的,所以我不得不使用一个似乎不属于api的功能。
我需要获取“修复校验和”按钮调用的URL,并且还包含repo和文件名作为内容的一部分。下面的代码对我有用。
filename = "filename from previous insert";
inUrl = "domain.com/ui/checksums/fix";
var stringPayload = "{\"repoKey\":\"repoKey\",\"path\":\"" + filename + "\"}";
var httpContent = new StringContent(stringPayload, Encoding.UTF8, "application/json");
var resp = client.PostAsync(inUrl, httpContent);
using (HttpContent content = resp.Result.Content)
{
string result = content.ReadAsStringAsync().Result;
}
答案 3 :(得分:0)
我能够只使用sha1标头,而人工制品则不再抱怨,这是一个bash片段,例如:
CHECKSUM = lambda
curl -k -umy_user:my_pass -H“ X-Checksum-Sha1:$ CHECKSUM” -XPUT https://cudgels_are_cool.com/artifactory/some_repo -T some.rpm