Sto provando a scaricare un file da cloudBlob tramite streaming. Mi riferisco a questo articolo CloudBlobCloudBlob.DownloadToStream restituisce null
Ecco il codice per scaricare il blob
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;
}
E il codice per convertirla in array di byte
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();
}
}
ma ottengo sempre valore nullo. Di seguito è il contenuto del file in streaming.
Cosa c'è di sbagliato con questo? Per favore aiuto.
EDIT
Impostazione della posizione a 0 dentro ReadFully
metodo non è consentito, così ho messo dentro DownloadBlobAsStream
questo dovrebbe funzionare ora:
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;
}
C'è un malinteso da parte vostra, come si sicuro possibile impostare Posizione a 0 @ ReadFully tuttavia è necessario utilizzare l'oggetto "Ingresso". L'oggetto mem ha un ambito locale all'interno di DownloadBlobAsStream() ecco perché se si desidera impostare mem.Position, è necessario farlo in questa funzione, tuttavia, quando si chiama ReadFully() e si passa l'oggetto "Stream", è possibile impostare la sua posizione su 0 come bene, come ho mostrato nel mio post. Quindi entrambi sono accettati e funzioneranno. – AvkashChauhan
Se imposto Position = 0 all'interno di ReadFully, genera un errore "Not Supported", e quando provo a guardare la proprietà di input, 'CanSeek = false', ma la tua idea ha aiutato molto. :) – fiberOptics
Giusto per chiarire stai ottenendo un valore nullo o un array di byte vuoto? Non ho visto un valore nullo, ma ho visto un array di byte vuoto nei miei test senza in qualche modo modificare la posizione del flusso. – kendaleiv