2016-12-07 154 views
-5

我正在尝试使用HttpClient.GetStreamAsync()方法来下载文件。但是这里有一个问题。 GetStreamAsync()方法返回只读流,所以我不能使用Length属性来声明将尝试读取字节的im字节数组缓冲区。如何使用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

您应该等待file.CopyToAsync这里 – ScottRFrost

+0

@ScottRFrost:修正,谢谢! –