2016-12-07 5 views
-5

Я пытаюсь использовать файл HttpClient.GetStreamAsync() для загрузки файла. Однако здесь есть проблема. GetStreamAsync() методы возвращают поток readonly, поэтому я не могу использовать свойство 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

'я не могу использовать свойство Length объявить буфер байт массива, в который им пытаются читать 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: Исправлено, спасибо! –