.NET: убедитесь, что URL является изображением - PullRequest
2 голосов
/ 20 сентября 2009

У меня есть требование, чтобы убедиться, что указанный пользователем URL-адрес изображения. Поэтому мне действительно нужен способ определить, что строка URL-адреса указывает на правильное изображение. Как я могу сделать это в .NET?

Ответы [ 3 ]

3 голосов
/ 20 сентября 2009

Вы не можете сделать это без загрузки файла (по крайней мере, его части). Используйте WebClient для извлечения URL-адреса и попробуйте создать новый Bitmap из возвращенного byte[]. Если это было успешно, это действительно изображение. В противном случае он выдаст исключение где-то в процессе.

Кстати, вы можете отправить запрос HEAD и проверить заголовок Content-Type в ответе (если он есть). Однако этот метод не является надежным. Сервер может ответить недействительным заголовком Content-Type.

2 голосов
/ 20 сентября 2009

Я бы использовал HttpWebRequest для получения заголовков, затем проверил бы тип контента, и что длина контента не равна нулю.

0 голосов
/ 25 сентября 2009

Вот что я сейчас использую. Есть критика?

public class Image
{
    public static bool Verifies(string url)
    {
        if (url == null)
        {
            throw new ArgumentNullException("url");
        }

        Uri address;

        if (!Uri.TryCreate(url, UriKind.Absolute, out address))
        {
            return false;
        }

        using (var downloader = new WebClient())
        {
            try
            {
                var image = new Bitmap(downloader.OpenRead(address));
            }
            catch (Exception ex)
            {
                if (// Couldn't download data
                    ex is WebException ||
                    // Data is not an image
                    ex is ArgumentException)
                {
                    return false;
                }
                else
                {
                    throw;
                }
            }
        }

        return true;
    }
}
...