Entwickler-Ecke

Sonstiges (.NET) - Blob-Url zu Stream


Kasko - Mi 31.07.19 22:05
Titel: Blob-Url zu Stream
Mir ist bereits bekannt wie ich eine Datei, unter der Nutzung einer Blob-Url, herunterladen kann. Das Problem ist das die Download-Methode nicht so einfach/sicher abbrechbar/pausierbar ist. Daher möchte ich einen Stream zu der Datei auslesen um dann die Datei mit einer abbrechbaren, pausierbaren eigenen Download-Methode zu speichern. Das Problem ist jetzt aber, dass die einzigen Möglichkeiten an einen Stream heranzukommen die DownloadStream-Methoden der Klasse CloudBlockBlob sind. Allerdings wird ja auch da schon die gesamten Datei heruntergeladen, jedoch nicht in eine normale Datei, sondern halt in einen Stream. Ich bräuchte allerdings eine Art NetworkStream, wo der Inhalt der Datei nicht vorher komplett in den Stream heruntergeladen wird.

Gibt es eine Möglichkeit um so einen Stream zu erhalten?

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Th69 - Do 01.08.19 09:02

Redest du von dieser Azure-Klasse: CloudBlockBlob [https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.storage.blob.cloudblockblob?view=azure-dotnet]?
Könntest du nicht eine der Methoden DownloadRangeToStreamAsync [https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.storage.blob.cloudblob.downloadrangetostreamasync?view=azure-dotnet] (oder DownloadRangeToByteArrayAsync) benutzen, um die Datei in Teilen (Chunks) herunterzuladen? Mittels des CancellationTokens ist die asynchrone Task ja auch abbrechbar.
Evtl. hilft dir das Code-Beispiel unter CloudBlockBlob.DownloadToStream vs DownloadRangeToStream [https://stackoverflow.com/questions/41810485/cloudblockblob-downloadtostream-vs-downloadrangetostream] dabei (statt parallel dann sequentiell die Teile verarbeiten)?

Edit: Du kannst aber auch eine eigene von Stream [https://docs.microsoft.com/de-de/dotnet/api/system.io.stream?view=netframework-4.8] (s. "Hinweise für Vererber") abgeleitete Klasse erstellen und die Methode Read(Byte[], Int32, Int32) passend überschreiben.