2016-07-12 2 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>"); 


} 
} 

Примечание: Я не могу запустить код несколько раз, как я не могу спамить сервер. Любые предложения будут оценены Ссылаясь на: https://msdn.microsoft.com/en-us/library/windows/hardware/dn800660(v=vs.85).aspx

+2

Вы пытаетесь перевести образец C# в код Java? – stuartd

+0

Да, я пытаюсь загрузить файл и код C# является примером кода (rest api) из microsoft. –

+0

Вы пытаетесь загрузить а, чтобы загрузить пакет аппаратного сертификата (HCK), как в ссылке, которую вы опубликовали? – stuartd

ответ

2

Согласно эталонным кода в C#, то, как представляется, с помощью REST API Put Block List, чтобы загрузить файл в качестве блока сгустка.

Таким образом, вы можете обратиться к ссылке REST API, не ссылаясь на образец C#, чтобы использовать httpclient для создания запроса на загрузку.

Однако простой способ использования Azure Storage SDK для 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.

URL-адрес SAS кажется, 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(); 
} 

Для справки, пожалуйста, см javadocs для Azure Storage Java SDK.

+1

Спасибо! Получил ответ SAS URL как sasUrl = https: //assetservice.blob.core.windows.net/org66/6c1b1cf4-4441-4456-lc25-7a5e28ddyio2/Input/6c1b1cf4-4441-4a74-lc25-03e9ee8d1cfa.hlkx? sv = 2013-08-17 & sr = b & sig = yaralawasablabakakakadada & 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)» для загрузки файла. –