Ich versuche, eine Datei aus cloudblob über Stream herunterzuladen. Ich Sie in diesem Artikel CloudBlobCloudBlob.DownloadToStream gibt null zurück
Hier ist der Code den 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;
}
Und den Code zum Download es in Byte-Array zu konvertieren
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();
}
}
Aber ich immer null Wert. Im Folgenden finden Sie den Inhalt der gestreamten Datei.
Was mit diesem ist falsch? Bitte helfen Sie.
EDIT
die Position auf 0 innerhalb ReadFully
Methode Einstellung nicht zulässig ist, so habe ich es in DownloadBlobAsStream
Dies sollte jetzt arbeiten:
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;
}
Es gibt einige Missverständnisse auf Ihrer Seite ist, wie Sie sicher Position auf 0 @ readfully einstellen können, aber Sie müssen Objekt „Eingang“ verwenden. Objekt mem hat einen lokalen Bereich in DownloadBlobAsStream() Deshalb, wenn Sie mem.Position setzen wollen, muss es in dieser Funktion gemacht werden, aber wenn Sie ReadFully() aufrufen und Ihr "Stream" -Objekt übergeben, können Sie seine Position auf 0 setzen naja, wie ich es in meinem Posting gezeigt habe. Also beide sind akzeptiert und werden funktionieren. – AvkashChauhan
Wenn ich die Position = 0 in ReadFully einstelle, wird ein Fehler "Nicht unterstützt" ausgegeben, und wenn ich versuche, die Eingabeeigenschaft zu betrachten, ist 'CanSeek = false', aber deine Idee hat mir sehr geholfen. :) – fiberOptics
Nur um zu klären, erhalten Sie einen Null-Wert oder ein leeres Byte-Array? Ich habe keinen Nullwert gesehen, aber in meinem Test ein leeres Byte-Array gesehen, ohne die Stream-Position irgendwie zu ändern. – kendaleiv