Gibt es eine Möglichkeit, ein Bild direkt von einer URL in c # herunterzuladen, wenn die URL am Ende des Links kein Bildformat hat? Beispiel für URL:
https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-xpf1/v/t34.0-12/10555140_10201501435212873_1318258071_n.jpg?oh=97ebc03895b7acee9aebbde7d6b002bf&oe=53C9ABB0&__gda__=1405685729_110e04e71d969d392b63b27ec4f4b24a
Ich kann das Bild herunterladen, wenn die URL mit einem Bildformat endet. Z.B:
http://img1.wikia.nocookie.net/__cb20101219155130/uncyclopedia/images/7/70/Facebooklogin.png
Je nachdem, ob Sie das Bildformat kennen oder nicht, können Sie dies folgendermaßen tun:
Laden Sie das Bild in eine Datei herunter und kennen Sie das Bildformat
Laden Sie das Bild in eine Datei herunter, ohne das Bildformat zu kennen
Sie können
Image.FromStream
jede Art von üblichen Bitmaps (jpg, png, bmp, gif, ...) laden, es erkennt automatisch den Dateityp und Sie müssen nicht einmal die URL-Erweiterung überprüfen (was nicht sehr gut ist trainieren). Z.B:Hinweis: ArgumentException kann ausgelöst werden,
Image.FromStream
wenn der heruntergeladene Inhalt kein bekannter Bildtyp ist.Überprüfen Sie diese Referenz auf MSDN , um alle verfügbaren Formate zu finden. Hier verweisen auf
WebClient
undBitmap
.quelle
webClient.ResponseHeaders["Content-Type"]
Für alle, die ein Bild herunterladen möchten, ohne es in einer Datei zu speichern:
quelle
Es ist nicht erforderlich,
System.Drawing
das Bildformat in einer URI zu suchen.System.Drawing
ist nur verfügbar,.NET Core
wenn Sie das System.Drawing.Common NuGet-Paket herunterladen. Daher sehe ich keine guten plattformübergreifenden Antworten auf diese Frage.Außerdem wird mein Beispiel nicht verwendet,
System.Net.WebClient
da Microsoft ausdrücklich von der Verwendung von abrätSystem.Net.WebClient
.Laden Sie ein Bild herunter und schreiben Sie es in eine Datei, ohne die Erweiterung zu kennen (plattformübergreifend) *
* Ohne alt
System.Net.WebClient
undSystem.Drawing
.Diese Methode lädt asynchron ein Bild (oder eine beliebige Datei, solange der URI eine Dateierweiterung hat) mit dem herunter
System.Net.Http.HttpClient
und schreibt es dann in eine Datei mit derselben Dateierweiterung wie das Bild im URI.Abrufen der Dateierweiterung
Der erste Teil des Abrufs der Dateierweiterung besteht darin, alle unnötigen Teile aus dem URI zu entfernen.
Wir verwenden Uri.GetLeftPart () mit UriPartial.Path, um alles von
Scheme
oben bis unten zu erhaltenPath
.Mit anderen Worten,
https://www.example.com/image.png?query&with.dots
wirdhttps://www.example.com/image.png
.Danach verwenden wir Path.GetExtension () , um nur die Erweiterung abzurufen ( in meinem vorherigen Beispiel
.png
).Bild herunterladen
Von hier sollte es einfach sein. Laden Sie das Image mit HttpClient.GetByteArrayAsync herunter , erstellen Sie den Pfad, stellen Sie sicher, dass das Verzeichnis vorhanden ist, und schreiben Sie die Bytes mit File.WriteAllBytesAsync () in den Pfad (oder
File.WriteAllBytes
wenn Sie sich in .NET Framework befinden).Beachten Sie, dass Sie mithilfe von Anweisungen Folgendes benötigen.
Anwendungsbeispiel
Anmerkungen
HttpClient
für jeden Methodenaufruf eine neue zu erstellen . Es soll während der gesamten Anwendung wiederverwendet werden. Ich habe ein kurzes Beispiel einesImageDownloader
(50 Zeilen) mit mehr Dokumentation geschrieben, das das hier wiederverwendetHttpClient
und ordnungsgemäß entsorgt, das Sie hier finden .quelle
Mit .net Framework kann PictureBox Control Bilder von der URL laden
und Bild in Laod Complete Event speichern
quelle
Versuchen Sie das, es hat bei mir funktioniert
Schreiben Sie dies in Ihren Controller
Hier ist meine Ansicht
quelle
Die meisten Beiträge, die ich gefunden habe, werden nach einer zweiten Iteration eine Zeitüberschreitung aufweisen. Besonders, wenn Sie eine Menge Bilder durchlaufen, wie ich es war. Um die obigen Vorschläge zu verbessern, ist hier die gesamte Methode:
quelle