2017-10-12 17 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; 
     } 
    } 
} 

アップデート

チェックサムの3種類とチェックサム・グループの2つのセットがあります。

"checksums" : { 
    "sha1" : "94332c090bdcdd87bd86426c224bcc7dc1c5f784", 
    "md5" : "dcada413214a5bd7164c6961863f5111", 
    "sha256" : "049c671f48e94c1ad25500f64e4879312cae70f489edc21313334b3f77b631e6" 
}, 
"originalChecksums" : { 
    "sha1" : "94332c090bdcdd87bd86426c224bcc7dc1c5f784", 
    "md5" : "dcada413214a5bd7164c6961863f5111" 
} 

checksums

は - Artifactory
originalChecksumsで計算されている - 私は上記のメッセージをレンダリングすると思う originalChecksumsグループが空でAPIを使用する場合は、アップローダ

によって提供されるものです。

+0

私はチェックサムはSHA256だと思います。次のチェックサムのWebページを検索してください:https://www.jfrog.com/confluence/display/RTF/Artifactory+REST+API – jdweng

+0

私は質問を更新しました。 sha256はアーティファクトが生成できるものです。ここの問題は空の 'originalChecksum'だと思います。 – Niklas

+0

ウェブページを再度ご覧ください。投稿する必要があります:POST/api/checksum/sha256 -H "Content-Type:application/json"ストリームをアップロードする前にsha256チェックサムを返すオブジェクトストリームを投稿に送ります。 – jdweng

答えて

3

  • は、(クライアント側でチェックサムを計算しますSHA1)
  • は、PUT要求のHTTPヘッダとして各チェックサムを提供

C#の例では、正しい解決策は、"X-Checksum-Sha1"ヘッダーを計算されたチェックサムに追加することです。 としては、リンクのドキュメントで説明し、簡単なカールの例では、artifactory-クライアントのJavaユーザーの場合

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

で、簡単な修正は、文書のアップロードの例に追加することです。

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の一部ではないような機能を使わなければならなかった。

私は、 "Check checksum"ボタンが呼び出すURLを取って、リポジトリとファイル名をコンテンツの一部として含める必要があります。以下のコードは私のために働いた。私はいくつかdiggingた後、あなたがする必要があることが表示されます

:-(artifactory-client-javaライブラリを使用して同じ問題に当たっています

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のアップロードを行い、あなたのアップロードとjfrog cliのアップロードとの違いを見るために、フィドラーのようなプロキシを使用しますか? – ajeans

+1

ええ、私は同意する、これはかなりではない。しかし、それは良いアイデアです、私はそれを試して、実際の問題が何であるかを知ると答えを更新します。 – Niklas

関連する問題