Existe-t-il un moyen de télécharger une image directement à partir d'une URL en c # si l'url n'a pas de format d'image à la fin du lien? Exemple d'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
Je sais comment télécharger l'image lorsque l'URL se termine par un format d'image. Par exemple:
http://img1.wikia.nocookie.net/__cb20101219155130/uncyclopedia/images/7/70/Facebooklogin.png
Selon que vous connaissez ou non le format de l'image, voici des moyens de le faire:
Télécharger l'image dans un fichier en connaissant le format de l'image
Télécharger l'image dans un fichier sans connaître le format de l'image
Vous pouvez utiliser
Image.FromStream
pour charger n'importe quel type de bitmaps habituels (jpg, png, bmp, gif, ...), il détectera automatiquement le type de fichier et vous n'aurez même pas besoin de vérifier l'extension d'url (ce qui n'est pas très bon entraine toi). Par exemple:Remarque: ArgumentException peut être levée
Image.FromStream
si le contenu téléchargé n'est pas un type d'image connu.Consultez cette référence sur MSDN pour trouver tous les formats disponibles. Voici la référence à
WebClient
etBitmap
.la source
webClient.ResponseHeaders["Content-Type"]
Pour toute personne souhaitant télécharger une image SANS l'enregistrer dans un fichier:
la source
Il n'est pas nécessaire d'utiliser
System.Drawing
pour trouver le format d'image dans un URI.System.Drawing
n'est pas disponible pour.NET Core
sauf si vous téléchargez le package NuGet System.Drawing.Common et je ne vois donc pas de bonnes réponses multiplateformes à cette question.De plus, mon exemple n'est pas utilisé
System.Net.WebClient
car Microsoft décourage explicitement l'utilisation deSystem.Net.WebClient
.Téléchargez une image et écrivez-la dans un fichier sans connaître l'extension (multiplateforme) *
* Sans ancien
System.Net.WebClient
etSystem.Drawing
.Cette méthode téléchargera de manière asynchrone une image (ou n'importe quel fichier tant que l'URI a une extension de fichier) à l'aide de
System.Net.Http.HttpClient
, puis l'écrira dans un fichier, en utilisant la même extension de fichier que l'image contenue dans l'URI.Obtenir l'extension de fichier
La première partie de l'obtention de l'extension de fichier consiste à supprimer toutes les parties inutiles de l'URI.
Nous utilisons Uri.GetLeftPart () avec UriPartial.Path pour tout obtenir, du
Scheme
plus auPath
.En d'autres termes,
https://www.example.com/image.png?query&with.dots
devienthttps://www.example.com/image.png
.Après cela, nous utilisons Path.GetExtension () pour obtenir uniquement l'extension (dans mon exemple précédent,
.png
).Téléchargement de l'image
À partir de là, cela devrait être simple. Téléchargez l'image avec HttpClient.GetByteArrayAsync , créez le chemin, assurez-vous que le répertoire existe, puis écrivez les octets dans le chemin avec File.WriteAllBytesAsync () (ou
File.WriteAllBytes
si vous êtes sur .NET Framework)Notez que vous avez besoin des directives using suivantes.
Exemple d'utilisation
Remarques
HttpClient
pour chaque appel de méthode. Il est censé être réutilisé tout au long de l'application. J'ai écrit un court exemple d'unImageDownloader
(50 lignes) avec plus de documentation qui réutilise correctementHttpClient
et en élimine correctement que vous pouvez trouver ici .la source
.net Framework permet à PictureBox Control de charger des images à partir de l'URL
et enregistrer l'image dans l'événement complet Laod
la source
Essayez ceci, cela a fonctionné pour moi
Écrivez ceci dans votre contrôleur
Voici mon avis
la source
La plupart des messages que j'ai trouvés expireront après une deuxième itération. Surtout si vous faites une boucle sur un tas d'images comme je l'ai été. Donc, pour améliorer les suggestions ci-dessus, voici la méthode entière:
la source