2017-10-12 97 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