2017-10-12 100 views
1

我使用下面的代码通过Artifactory的REST API上传文件。 我的问题是,当我通过GUI查看文件时,我收到以下消息:修复通过REST API上传文件时Artifactory中的校验和

客户端未发布校验和值。如果您信任上传的 工件,则可以通过单击“修复 检查和”按钮来接受实际的检查和。

如何解决上传问题,使该消息消失?

如果我通过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

我觉得校验SHA256。搜索下面的网页进行校验:https://www.jfrog.com/confluence/display/RTF/Artifactory+REST+API – jdweng

+0

我已更新我的问题。 sha256是artifactory可以产生的东西。我认为这里的问题是空的'originalChecksums'。 – Niklas

+0

请再次参阅网页。您需要发布:POST/api/checksum/sha256 -H“Content-Type:application/json”。因此,请将对象流发送给在上传流之前将返回sha256校验和的帖子。 – jdweng

回答

3

我打使用artifactory-client-java库同样的问题:-(

所以有些digging后,看来你需要:

  • 计算在客户端校验( sha1)
  • 提供每个校验和作为PUT请求上的HTTP标头

对于您的C#示例,正确的解决方案是使用计算的校验和添加标头“X-Checksum-Sha1”。 作为链接文档中所解释的,一个简单的卷曲的例子是

curl -uadmin:password -T file.jar -H "X-Checksum-Sha1:c9a355147857198da3bdb3f24c4e90bd98a61e8b""http://localhost:8081/artifactory/libs-release-local/file.jar" -i 

对于artifactory的客户端的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

是的!这正是我解决问题的方法。我没有时间更新,但我必须计算md5和sha1校验和并将它们添加到头文件中。我会将其标记为答案。 – Niklas

1

好的,所以我不得不使用一个似乎不属于API的函数。

我想采取“修正校验和”按钮调用的URL,并且还包括回购和文件名作为内容的一部分。下面的代码为我工作。

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; 
} 
+0

这更像是一个解决方法。您的上传缺少所有其他客户端可以提供的信息(jfrog cli,artifactory-client-java)。现在上传的校验和错误了,您可以使用专用的REST调用来修复它。你为什么不用jfrog cli上传相同的jar,并使用像fiddler这样的代理来查看你的上传和jfrog cli中的不同? – ajeans

+1

是的,我同意,这不是很漂亮。但是这是一个好主意,如果我发现真正的问题是什么,我会尝试并更新我的答案。 – Niklas