Есть ли способ загрузить изображение прямо с 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
В зависимости от того, знаете ли вы формат изображения или нет, это можно сделать следующими способами:
Загрузите изображение в файл, зная формат изображения
Загрузить изображение в файл, не зная формата изображения
Вы можете использовать
Image.FromStream
для загрузки любых обычных растровых изображений (jpg, png, bmp, gif, ...), он автоматически определит тип файла, и вам даже не нужно проверять расширение url (что не очень хорошо практика). Например:Примечание. ArgumentException может быть вызвано,
Image.FromStream
если загруженное содержимое не является известным типом изображения.Проверьте эту ссылку на MSDN, чтобы найти все доступные форматы. Вот ссылки на
WebClient
иBitmap
.источник
webClient.ResponseHeaders["Content-Type"]
Для тех, кто хочет скачать изображение БЕЗ сохранения в файл:
источник
Необязательно использовать
System.Drawing
для поиска формата изображения в URI.System.Drawing
недоступен,.NET Core
если вы не загрузите пакет NuGet System.Drawing.Common, и поэтому я не вижу хороших кросс-платформенных ответов на этот вопрос.Кроме того, мой пример не используется,
System.Net.WebClient
поскольку Microsoft явно не рекомендует использоватьSystem.Net.WebClient
.Загрузите изображение и запишите его в файл, не зная расширения (кроссплатформенность) *
* Без старых
System.Net.WebClient
иSystem.Drawing
.Этот метод будет асинхронно загружать изображение (или любой файл, если URI имеет расширение файла) с помощью,
System.Net.Http.HttpClient
а затем записывает его в файл, используя то же расширение файла, что и у изображения в URI.Получение расширения файла
Первая часть получения расширения файла - это удаление всех ненужных частей из URI.
Мы используем Uri.GetLeftPart () с UriPartial.Path , чтобы получить все от
Scheme
до кPath
.Другими словами,
https://www.example.com/image.png?query&with.dots
становитсяhttps://www.example.com/image.png
.После этого мы используем Path.GetExtension (), чтобы получить только расширение (в моем предыдущем примере
.png
).Скачивание образа
Отсюда все должно быть прямо. Загрузите изображение с помощью HttpClient.GetByteArrayAsync , создайте путь, убедитесь, что каталог существует, а затем запишите байты в путь с помощью File.WriteAllBytesAsync () (или
File.WriteAllBytes
если вы используете .NET Framework)Обратите внимание, что вам потребуются следующие директивы using.
Пример использования
Ноты
HttpClient
для каждого вызова метода. Предполагается, что он будет повторно использован во всем приложении. Я написал короткий примерImageDownloader
(50 строк) с дополнительной документацией, которая правильно повторно используетHttpClient
и правильно избавляется от нее, которую вы можете найти здесь .источник
.net Framework позволяет элементу управления PictureBox загружать изображения с URL-адреса
и сохранить изображение в Laod Complete Event
источник
Попробуй, это сработало для меня
Напишите это в своем контроллере
Вот мой взгляд
источник
Большинство сообщений, которые я нашел, будут отключены после второй итерации. В частности, если вы просматриваете кучу изображений, как я. Итак, чтобы улучшить предложения выше, вот весь метод:
источник