Подтвердить что ты не робот

Как скачать изображение с URL

Есть ли способ загрузить изображение прямо из url в С#, если URL-адрес не имеет формата изображения в конце ссылки? Пример 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

Я знаю, как загрузить изображение, когда URL-адрес заканчивается форматом изображения. Например:

http://img1.wikia.nocookie.net/__cb20101219155130/uncyclopedia/images/7/70/Facebooklogin.png
4b9b3361

Ответ 1

Просто вы можете использовать следующие методы.

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

Эти методы почти такие же, как DownloadString (..) и DownloadStringAsync (...). Они хранят файл в каталоге, а не в строке С# и не нуждаются в расширении формата в URi

Если вы не знаете формат изображения (.png,.jpeg и т.д.)

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();
}

Используй это

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
}

Ответ 2

В зависимости от того, знаете ли вы формат изображения, выполните следующие действия:

Загрузите изображение в файл, зная формат изображения

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

Загрузите изображение в файл, не зная формат изображения

Вы можете использовать Image.FromStream для загрузки любых обычных растровых изображений (jpg, png, bmp, gif,...), он автоматически обнаружит файл и вам даже не нужно проверять расширение URL (что не очень хорошая практика). Например:

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) ; 
       }
   } 

}

Примечание: ArgumentException может быть выбрано Image.FromStream, если загруженный контент не является известным типом изображения.

Проверьте эту ссылку в MSDN, чтобы найти весь доступный формат. Вот ссылка на WebClient и Bitmap.

Ответ 3

Для тех, кто хочет скачать изображение без сохранения его в файл:

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

Ответ 4

.net Framework позволяет PictureBox Control загружать изображения с URL-адреса

и сохранить изображение в завершающем событии Лаода

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

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

Ответ 5

Попробуйте это должно определенно работать на 100%

Запишите это в свой файл контроллера

public class DemoController: Controller

        public async Task<FileStreamResult> GetLogoImage(string logoimage)
        {
            string str = "" ;
            var filePath = Server.MapPath("~/App_Data/" + SubfolderName);//If subfolder exist otherwise leave.
            // 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));
        }

Вот мой вид

<div><a href="/DemoController/GetLogoImage?Type=Logo" target="_blank">Download Logo</a></div>