¿Hay alguna manera de descargar una imagen directamente desde una URL en c # si la URL no tiene un formato de imagen al final del enlace? Ejemplo de 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
Sé cómo descargar la imagen cuando la URL termina con un formato de imagen. P.ej:
http://img1.wikia.nocookie.net/__cb20101219155130/uncyclopedia/images/7/70/Facebooklogin.png

Dependiendo de si conoce o no el formato de la imagen, aquí hay formas de hacerlo:
Descargar imagen a un archivo, conociendo el formato de imagen
Descargar la imagen a un archivo sin conocer el formato de la imagen
Puede usar
Image.FromStreampara cargar cualquier tipo de mapa de bits habitual (jpg, png, bmp, gif, ...), detectará automáticamente el tipo de archivo y ni siquiera necesita verificar la extensión de la URL (que no es muy buena práctica). P.ej:Nota: ArgumentException puede aparecer
Image.FromStreamsi el contenido descargado no es un tipo de imagen conocido.Consulte esta referencia en MSDN para encontrar todos los formatos disponibles. Aquí se hace referencia a
WebClientyBitmap.fuente
webClient.ResponseHeaders["Content-Type"]Para cualquiera que quiera descargar una imagen SIN guardarla en un archivo:
fuente
No es necesario utilizar
System.Drawingpara buscar el formato de imagen en un URI.System.Drawingno está disponible a.NET Coremenos que descargue el paquete System.Drawing.Common NuGet y, por lo tanto, no veo ninguna buena respuesta multiplataforma a esta pregunta.Además, mi ejemplo no se usa
System.Net.WebClientya que Microsoft desalienta explícitamente el uso deSystem.Net.WebClient.Descarga una imagen y escríbela en un archivo sin conocer la extensión (multiplataforma) *
* Sin edad
System.Net.WebClientySystem.Drawing.Este método descargará de forma asincrónica una imagen (o cualquier archivo siempre que el URI tenga una extensión de archivo) usando el
System.Net.Http.HttpClienty luego lo escribirá en un archivo, usando la misma extensión de archivo que tenía la imagen en el URI.Obtener la extensión del archivo
La primera parte para obtener la extensión del archivo es eliminar todas las partes innecesarias del URI.
Usamos Uri.GetLeftPart () con UriPartial.Path para obtener todo, desde el
Schemehasta elPath.En otras palabras, se
https://www.example.com/image.png?query&with.dotsconvierte enhttps://www.example.com/image.png.Después de eso, usamos Path.GetExtension () para obtener solo la extensión (en mi ejemplo anterior,
.png).Descargando la imagen
A partir de aquí debería ser sencillo. Descargue la imagen con HttpClient.GetByteArrayAsync , cree la ruta, asegúrese de que el directorio exista y luego escriba los bytes en la ruta con File.WriteAllBytesAsync () (o
File.WriteAllBytessi está en .NET Framework)Tenga en cuenta que necesita las siguientes directivas using.
Uso de ejemplo
Notas
HttpClientpara cada llamada de método. Se supone que debe reutilizarse en toda la aplicación. Escribí un breve ejemplo de unImageDownloader(50 líneas) con más documentación que reutiliza correctamenteHttpClienty lo desecha correctamente que puede encontrar aquí .fuente
.net Framework permite PictureBox Control cargar imágenes desde la URL
y guardar imagen en evento completo de Laod
fuente
Prueba esto, funcionó para mí
Escribe esto en tu controlador
Esta es mi vista
fuente
La mayoría de las publicaciones que encontré expirarán después de una segunda iteración. Particularmente si estás recorriendo un montón de imágenes como yo. Entonces, para mejorar las sugerencias anteriores, aquí está el método completo:
fuente