2016-12-07 2 views
-5

HttpClient.GetStreamAsync() 메서드를 사용하여 파일을 다운로드하려고합니다. 그러나 여기에는 문제가 있습니다. GetStreamAsync() 메서드는 readonly 스트림을 반환하므로 바이트 배열 버퍼를 선언하여 바이트를 읽으려고 Length 속성을 사용할 수 없습니다.HttpClient.GetStreamAsync() 메서드를 사용하는 방법?

 using (var file = await _httpClient.GetStreamAsync(url).ConfigureAwait(false)) 
    { 
     // it fails at file.Length below 
     byte[] blob = new byte[file.Length]; 
     await file.ReadAsync(blob, 0, (int)file.Length).ConfigureAwait(false);   
    } 
+1

는'내가 bytes' 읽으려고 메신저되는 바이트 배열 버퍼를 선언 할 길이 속성을 사용할 수 없습니다. 스트림은 바이트를 반환 할 수 있습니다 ... 배열을 선언 할 필요가 없습니다 ... –

+2

BTW : 'byte [] blob = await _httpClient.GetByteArrayAsync'을 시도하지 않은 것 같습니다. –

답변

1

넌 그냥 MemoryStream로를 읽고 거기에서 바이트 배열을 얻을 수 있습니다 :

using (var file = await _httpClient.GetStreamAsync(url).ConfigureAwait(false)) 
using (var memoryStream = new MemoryStream()) 
{ 
    await file.CopyToAsync(memoryStream); 
    return memoryStream.ToArray(); 
} 
+0

아마도 파일을 기다려야합니다 .CopyToAsync 여기 – ScottRFrost

+0

@ScottRFrost : 고마워! –

관련 문제