web-dev-qa-db-fra.com

Comment télécharger l'image à partir de l'URL

Est-il possible 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
70
Ifwat Ibrahim

Simplement Vous pouvez utiliser les méthodes suivantes.

  using (WebClient client = new WebClient()) 
  {
    client.DownloadFile(new Uri(url), @"c:\temp\image35.png");

     //OR 

    client.DownloadFileAsync(new Uri(url), @"c:\temp\image35.png");
   }

Ces méthodes sont presque les mêmes que DownloadString (..) et DownloadStringAsync (...). Ils stockent le fichier dans Directory plutôt que dans la chaîne C # et ne nécessitent pas d'extension de format dans URi

Si vous ne connaissez pas le format (.png, .jpeg, etc.) de l'image

 public void SaveImage(string filename, ImageFormat format) {

    WebClient client = new WebClient();
    Stream stream = client.OpenRead(imageUrl);
    Bitmap bitmap;  bitmap = new Bitmap(stream);

    if (bitmap != null) 
      bitmap.Save(filename, format);

    stream.Flush();
    stream.Close();
    client.Dispose();
}

En l'utilisant

try{

  SaveImage("--- Any Image Path ---", ImageFormat.Png)

 }catch(ExternalException)
 {
   //Something is wrong with Format -- Maybe required Format is not 
   // applicable here
 }
 catch(ArgumentNullException)
 {  
    //Something wrong with Stream
 }

88
Charlie

Selon que vous connaissiez ou non le format d'image, voici comment vous pouvez le faire: 

Télécharger l'image dans un fichier, connaissant le format de l'image

using (WebClient webClient = new WebClient()) 
{
   webClient.DownloadFile("http://yoururl.com/image.png", "image.png") ; 
}

Télécharger l'image dans un fichier sans connaître le format de l'image

Vous pouvez utiliser Image.FromStream pour charger tout 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 n'est pas une très bonne pratique). Par exemple: 

using (WebClient webClient = new WebClient()) 
{
    byte [] data = webClient.DownloadData("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_110e04e71d9");

   using (MemoryStream mem = new MemoryStream(data)) 
   {
       using (var yourImage = Image.FromStream(mem)) 
       { 
          // If you want it as Png
           yourImage.Save("path_to_your_file.png", ImageFormat.Png) ; 

          // If you want it as Jpeg
           yourImage.Save("path_to_your_file.jpg", ImageFormat.Jpeg) ; 
       }
   } 

}

Remarque: ArgumentException peut être levé par Image.FromStream si le contenu téléchargé n'est pas un type d'image connu.

Cochez cette référence sur MSDN pour trouver tous les formats disponibles. Voici la référence à WebClient et Bitmap .

64
Mr. Fahrenheit

.net Framework permet au contrôle PictureBox de charger des images à partir de l'URL

et enregistrer une image dans l'événement de chargement terminé

protected void LoadImage() {
 pictureBox1.ImageLocation = "PROXY_URL;}

void pictureBox1_LoadCompleted(object sender, AsyncCompletedEventArgs e) {
   pictureBox1.Image.Save(destination); }
4
Ali Humayun

Pour ceux qui souhaitent télécharger une image SANS l'enregistrer dans un fichier:

Image DownloadImage(string fromUrl)
{
    using (System.Net.WebClient webClient = new System.Net.WebClient())
    {
        using (Stream stream = webClient.OpenRead(fromUrl))
        {
            return Image.FromStream(stream);
        }
    }
}
0
Brian Cryer

Essayez ça fonctionnera à 100%

Écrivez ceci dans votre fichier de contrôleur

public class TenantCustomizationController : RecruitControllerBase

    //enter code here

[AllowAnonymous]
        [HttpGet]
        public async Task<FileStreamResult> GetLogoImage(string logoimage)
        {
            string str = "" ;
            var filePath = Server.MapPath("~/App_Data/" + AbpSession.TenantId.Value);
            // DirectoryInfo dir = new DirectoryInfo(filePath);
            string[] filePaths = Directory.GetFiles(@filePath, "*.*");
            foreach (var fileTemp in filePaths)
            {
                  str= fileTemp.ToString();
            }
                return File(new MemoryStream(System.IO.File.ReadAllBytes(str)), System.Web.MimeMapping.GetMimeMapping(str), Path.GetFileName(str));
        }
        //09/07/2018

Here Is my View


<div><a href="/TenantCustomization/GetLogoImage?Type=Logo" target="_blank">@L("DownloadBrowseLogo")</a></div>
0
Chandan Kumar