Как загрузить изображение с 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 ответов:
просто Вы можете использовать следующие методы.
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