Я пытаюсь загрузить файл из cloudBlob через поток. Я имею в виду эту статью CloudBlobCloudBlob.DownloadToStream возвращает null
Вот код для загрузки блоб
public Stream DownloadBlobAsStream(CloudStorageAccount account, string blobUri)
{
Stream mem = new MemoryStream();
CloudBlobClient blobclient = account.CreateCloudBlobClient();
CloudBlockBlob blob = blobclient.GetBlockBlobReference(blobUri);
if (blob != null)
blob.DownloadToStream(mem);
return mem;
}
И код, чтобы преобразовать его в массив байтов
public static byte[] ReadFully(Stream input)
{
byte[] buffer = new byte[16 * 1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
return ms.ToArray();
}
}
Но я всегда получаю нулевое значение. Ниже приведено содержимое потокового файла.
Что не так с этим? Пожалуйста помоги.
EDIT
Установка положения в 0 внутри ReadFully
метода не допускается, так что я положил его в DownloadBlobAsStream
Это должно работать:
public Stream DownloadBlobAsStream(CloudStorageAccount account, string blobUri)
{
Stream mem = new MemoryStream();
CloudBlobClient blobclient = account.CreateCloudBlobClient();
CloudBlockBlob blob = blobclient.GetBlockBlobReference(blobUri);
if (blob != null)
blob.DownloadToStream(mem);
mem.Position = 0;
return mem;
}
Существует какое-то недоразумение с вашей стороны, как вы уверены, что можете установить позицию в 0 @ ReadFully однако вы должны использовать «вход» объект. Объект mem имеет локальную область внутри DownloadBlobAsStream(), поэтому, если вы хотите установить mem.Position, это должно быть сделано в этой функции, однако, когда вы вызываете ReadFully() и передаете свой объект Stream, вы можете установить его Position на 0 как ну, как я показал в своем размещении. Поэтому оба принимаются и будут работать. – AvkashChauhan
Если я установил Position = 0 внутри ReadFully, он выдает сообщение об ошибке «Не поддерживается», и когда я пытаюсь посмотреть свойство ввода, «CanSeek = false», но ваша идея очень помогла. :) – fiberOptics
Чтобы уточнить, вы получаете нулевое значение или пустой массив байтов? Я не видел нулевого значения, но видел в моем тестировании пустой массив байтов, не изменяя каким-либо образом положение потока. – kendaleiv