Как загрузить изображение с 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