Entwickler-Ecke

Sonstiges (.NET) - Download von einer Blob-Url


Kasko - Mi 07.08.19 08:31
Titel: Download von einer Blob-Url
Ich möchte etwas von einer Blob-Url herunterladen. Um Blobs herunterzuladen kann man ja z.B. die Microsoft Azure-API verwenden. Dies funktioniert aber nur wenn ich eine Datei von meinem eigenen storage account herunterladen möchte. Das Problem bei den Urls ist jetzt, dass ich nicht der Hoster dieser Dateien bin. Gibt es eine Möglichkeit sie via C# herunterzuladen?

Beispiel einer Blob-Url: blob:https://flex.aniflex.org/afbf9776-76ea-47dc-9951-2fadafc3adff [blob:https://flex.aniflex.org/afbf9776-76ea-47dc-9951-2fadafc3adff]


jfheins - Mi 07.08.19 18:44

Solange es eine URL gibt, kann man die doch einfach mit dem Webclient runterladen, oder?

Also WebClient.DownloadDataTaskAsync [https://docs.microsoft.com/en-us/dotnet/api/system.net.webclient.downloaddatataskasync?view=netframework-4.8] oder WebClient.DownloadFileTaskAsync [https://docs.microsoft.com/en-us/dotnet/api/system.net.webclient.downloadfiletaskasync?view=netframework-4.8] Methode benutzen und fertig. Falls nicht: kannst du deinen Use-Case etwas ausführlicher beschreiben?

Oder (noch moderner) den HttpClient ;-)


Kasko - Do 08.08.19 10:43

Nein das wird nicht funktionieren. Blob-Urls sind sozusagen Fake-Urls. Aus folgendem Grund.

Sie sind keine "normalen" resource locations. Durch das 'blob:' entsteht ein präfix, welches von den Clients nicht unterstützt wird. Auch Die verschiedensten WebRequests werden damit nichts anfangen können. Das Präfix gibt ja in der Regel nur das zu verwendende Protokoll an. 'blob:https' ist allerdings kein Protokoll. Blob steht ja nur für Binary large object. Wenn man jetzt auf die Idee kommt das 'blob:' wegzulassen, ist es zwar eine "normale" Url, aber sie führt ins leere. Deshalb sind Blob-Urls "Fake"-Urls. Man kann nicht auf dem gewohnten Weg auf die Daten zugreifen. Es muss über Umwege gehen.

Nur Wie?

Der geforderte Use-Case

Ich schreibe einen Web-File-Downloader. Er ist darauf ausgelegt von verschiedensten Seiten die entsprechende Download-Url herauszulesen und von dort die Dateien herunterzuladen.

Momentaner Stand:

Der Downloader funktioniert einwandfrei, solange es sich um eine "normale" Url handelt. Er unterstützt auch verschiedene Protokolle durch Einführung einer ProtocolProviderFactory, die für jede Url einen passenden ProtocolProvider ausspuckt. Dies ist ein Provider für das zu verwendende Protokoll und hat die Möglichkeit mir Informationen über die Datei und den Stream für die Datei selbst zurückzugeben. Das Problem ist jetzt, dass viele Seiten auf Blob-Urls setzen, vor allem wenn es um Videos geht. Z.B. auch Youtube. Deshalb möchte ich das Programm um die Möglichkeit erweitern auch Dateien von Blob-Urls herunterzuladen. Am besten kompatibel mit den ProtocolProvidern. Also möchte ich wenns geht den Stream zur Datei auslesen können.


Kasko - Fr 16.08.19 18:29

Hat wirklich niemand eine Idee?


Ralf Jansen - Sa 17.08.19 13:24

Zitat:
Hat wirklich niemand eine Idee?


Schnelles googlen sagt mir das dieser blob Präfix ein Browserfeature ist und nicht der eines Webservers. Um daran zu kommen musst du das also im Browser lösen (aka Javascript in irgendeinem Browser Addon oder clientseitigem Script). Oder andere Lösung du schaust dir die Dokumention zur Implementation in Browsern an (vermutlich irgendwo in der FileAPI [https://www.w3.org/TR/FileAPI/]) und programmierst das Browserfeature in c# nach.