Autor Beitrag
Kasko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101

Win 10
C# C++ (VS 2017/19), (Java, PHP)
BeitragVerfasst: Mi 07.08.19 08:31 
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
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 885
Erhaltene Danke: 149

Win7
VS 2013, VS2015
BeitragVerfasst: Mi 07.08.19 18:44 
Solange es eine URL gibt, kann man die doch einfach mit dem Webclient runterladen, oder?

Also WebClient.DownloadDataTaskAsync oder WebClient.DownloadFileTaskAsync Methode benutzen und fertig. Falls nicht: kannst du deinen Use-Case etwas ausführlicher beschreiben?

Oder (noch moderner) den HttpClient ;-)
Kasko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101

Win 10
C# C++ (VS 2017/19), (Java, PHP)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101

Win 10
C# C++ (VS 2017/19), (Java, PHP)
BeitragVerfasst: Fr 16.08.19 18:29 
Hat wirklich niemand eine Idee?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4464
Erhaltene Danke: 919


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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) und programmierst das Browserfeature in c# nach.