2016-07-12 10 views
1

サンプルC#コードのJavaでファイルをアップロードする方法:私は、ファイルをアップロードするためにきた時点で立ち往生しています与えられたSAS URI

static void UploadFile(string sasUrl, string filepath) 
    { 
     using (var client = new HttpClient()) 
     { 
      client.DefaultRequestHeaders.Add("x-ms-version", Version); 
      client.DefaultRequestHeaders.Add("x-ms-client-request-id", SessionGuid); 

      StringBuilder sb = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\"?><BlockList>"); 

      foreach (byte[] chunk in GetFileChunks(filepath)) 
      { 
       var blockid = GetHash(chunk); 
       HttpRequestMessage chunkMessage = new HttpRequestMessage() 
       { 
        Method = HttpMethod.Put, 
        RequestUri = new Uri(sasUrl + "&timeout=90&comp=block&blockid=" + WebUtility.UrlEncode(blockid)), 
        Content = new ByteArrayContent(chunk) 
       }; 
       chunkMessage.Headers.Add("x-ms-blob-type", "BlockBlob"); 
       chunkMessage.Content.Headers.Add("MD5-Content", blockid); 

       TimeAction("Uploading chunk " + blockid + " took {0} ms",() => 
       { 
        var response = client.SendAsync(chunkMessage).Result; 
       }); 
       sb.Append("<Latest>"); 
       sb.Append(blockid); 
       sb.Append("</Latest>"); 
      } 
      sb.Append("</BlockList>"); 

      Trace.WriteLine(sb.ToString()); 

      HttpRequestMessage commitMessage = new HttpRequestMessage() 
      { 
       Method = HttpMethod.Put, 
       RequestUri = new Uri(sasUrl + "&timeout=90&comp=blocklist"), 
       Content = new StringContent(sb.ToString()) 
      }; 
      TimeAction("Commiting the blocks took {0} ms",() => 
      { 
       var commit = client.SendAsync(commitMessage).Result; 
      }); 
     } 
    } 

。また、与えられたコードでコミットする理由を知りたいですか?これまで

私の進歩である:

public static void uploadFile(String sasUrl , String filepath , String sessionGuid) 
{ 
    File file = new File(filepath); 
    FileInputStream fileInputStream=null; 
    Response reply = new Response(); 
    HttpClient client = HttpClientBuilder.create().build(); 
    HttpPost request = new HttpPost(sasUrl); 
    request.setHeader("x-ms-version", "2013-08-15"); 
    request.setHeader("x-ms-client-request-id", sessionGuid); 
    StringBuilder sb = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\"?><BlockList>"); 


} 
} 

注:私は、サーバーをスパムすることができないように私は、コードを複数回実行することはできません。任意の提案は を参照すると理解される:C#で参照コードによればhttps://msdn.microsoft.com/en-us/library/windows/hardware/dn800660(v=vs.85).aspx

+2

C#サンプルをJavaコードに変換しようとしていますか? – stuartd

+0

はい、ファイルをアップロードしようとしていますが、C#コードはマイクロソフトの(残りのAPI)サンプルコード –

+0

投稿したリンクのように、ハードウェア証明書キット(HCK)パッケージをアップロードするためにアップロードしようとしていますか? – stuartd

答えて

2

、ブロックブロブとしてファイルをアップロードするためのREST API Put Block Listを使用しているように見えます。

C#サンプルを参照せずにREST APIリファレンスを参照すると、httpclientを使用してアップロード要求を作成できます。

ただし、単純な方法は、Azure Storage SDK for Javaを使用することです。ファイルをアップロードするには、クラスCloudBlockBlobを使用して、機能がupload(InputStream sourceStream, long length)のファイルをアップロードする必要があります。チュートリアルhttps://azure.microsoft.com/en-us/documentation/articles/storage-java-how-to-use-blob-storage/#upload-a-blob-into-a-containerを参照してください。

SASのURLはここhttps://myaccount.blob.core.windows.net/mycontainer/myblob?comp=blocklist&...

のように思えるの例としてコードです。

URL sasUrl = new URL("<sas-url>"); 
try 
{. 
    CloudBlockBlob blob = new CloudBlockBlob(sasUrl) 
    File source = new File(filePath); 
    blob.upload(new FileInputStream(source), source.length()); 
} 
catch (Exception e) 
{ 
    // Output the stack trace. 
    e.printStackTrace(); 
} 

参考として、AzureのJavaのストレージSDK用javadocsを参照してください。

+1

ありがとう! sasUrl = https://assetservice.blob.core.windows.net/org66/6c1b1cf4-4441-4456-lc25-7a5e28ddyio2/Input/6c1b1cf4-4441-4a74-lc25-03e9ee8d1cfa.hlkxというレスポンスSAS URLがありますか? sv = 2013-08-17&sr = b&sig = yaralawasablablakakakadaada&se = 2016-07-13T15%3A22%3A32Z&sp = w 私のブロックブロブ名は何ですか?入力/ ---> 6c1b1cf4-4441-4a74-lc25-03e9ee8d1cfa.hlkx の後にsasurlからコンテナ名を自動的に取りますか、それとも明示的に言及する必要がありますか?はいの場合は、それはorg66ですか? –

+1

この場合、は何でしょうか? – MikasaAckerman

+1

@TulsiSvああ、sasのURLはBLOBですので、 'CloudBlockBlob blob = new CloudBlockBlob(sasUrl)'を直接使用してファイルをアップロードしてください。 –