Как загрузить изображение с url


есть ли способ загрузить изображение непосредственно из url-адреса в c#, если 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
5 60

5 ответов:

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

  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(...). Они хранят файл в каталоге, а не в строке C#, и нет необходимости расширения формата в 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
 }

в зависимости от того, знаете ли вы формат изображения, вот способы, которыми вы можете это сделать:

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

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.

.net Framework позволяет элементу управления PictureBox загружать изображения из url

и сохранить изображение в Laod Complete Event

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

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

Попробуйте Это, Он Определенно Будет Работать 100%

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

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>

Я сделал это простым и автоматизированным способом, у меня есть список URL-адресов изображений, которые сохраняются в базе данных.

#region NOMEAR E BAIXAR TODAS AS IMAGENS
var imagens = new IImportsAContext();//db
var img = imagens.Items.AsEnumerable().Select(c => c.Imagem ).ToList();//get the COL.


foreach (string item in img )
{
    if (item != "")
    {
        var invertido = item.Reverse();
        var numero_invertido = "";
        string palavra_invertida = "";

        foreach (char letra in invertido)
        {
            palavra_invertida += letra;
        }

        int ponto_posicao = palavra_invertida.IndexOf(".");

        if (ponto_posicao > 0)
        {
            palavra_invertida = palavra_invertida.Remove(0, ponto_posicao + 1);//remove inicio, 4 letras

            var numeral = palavra_invertida.Remove(0, palavra_invertida.IndexOf("-") + 1);


            while (numeral.Contains("-"))
            {
                var index = numeral.IndexOf("-");
                numeral = numeral.Remove(0, index+1);
            }


            numero_invertido = numeral.Remove(numeral.IndexOf("/"));

            int fim_texto = palavra_invertida.IndexOf("h");
            int fim_palavra = palavra_invertida.IndexOf( "/");
            palavra_invertida = palavra_invertida.Remove(fim_palavra);
        }
        var NUMERO = numero_invertido.Reverse();

        var TEXTO = palavra_invertida.Reverse();
        string nome = "";
        foreach (var le in TEXTO)
        {
            nome += le;
        }
        foreach (var it in NUMERO)
        {
            nome += it;
        }

        //Console.WriteLine("\n"+nome);

         WebClient cliente = new WebClient();

        var imagem = nome + ".jpg";
        cliente.DownloadFile(item, imagem);

        Thread.Sleep(1000);
    }
}

#endregion