在C#/ .NET中检测图像URL

时间:2012-06-18 12:24:08

标签: c# .net url c#-4.0

有没有办法可以检测到图片网址,例如:

http://mysite.com/image.jpg

但也有其他格式?我在.NET 4.0中使用C#。

这样的东西
bool isImageUrl(string URL){
}

编辑我的意思是,如果网址指向图片。例如,URL

http://mysite.com/image.jpg

有效图片,但

http://mysite.com/image

不是。

5 个答案:

答案 0 :(得分:12)

您可以使用Http的HEAD方法确定它(不下载整个图像)

bool IsImageUrl(string URL)
{
    var req = (HttpWebRequest)HttpWebRequest.Create(URL);
    req.Method = "HEAD";
    using (var resp = req.GetResponse())
    {
        return resp.ContentType.ToLower(CultureInfo.InvariantCulture)
                   .StartsWith("image/");
    }
}

答案 1 :(得分:6)

您可以向网址发送HTTP请求(使用HttpWebRequest),并检查返回的ContentType是否以image/开头。

答案 2 :(得分:3)

您当然可以简单地检查URL是否以已知的图像文件扩展名结尾。但是,更安全的方法是实际下载资源并检查您实际获得的内容是否为图像:

public static bool IsUrlImage(string url)
{
    try
    {
        var request = WebRequest.Create(url);
        request.Timeout = 5000;
        using (var response = request.GetResponse())
        {
            using (var responseStream = response.GetResponseStream())
            {
                if (!response.ContentType.Contains("text/html"))
                {
                    using (var br = new BinaryReader(responseStream))
                    {
                        // e.g. test for a JPEG header here
                        var soi = br.ReadUInt16();  // Start of Image (SOI) marker (FFD8)
                        var jfif = br.ReadUInt16(); // JFIF marker (FFE0)
                        return soi == 0xd8ff && jfif == 0xe0ff;
                    }
                }
            }
        }
    }
    catch (WebException ex)
    {
        Trace.WriteLine(ex);
        throw;
    }
    return false;
}

答案 3 :(得分:1)

您可以使用.EndsWith()为您定义的每组字符串检查字符串。

如果您想知道该URL上的对象是否实际图像,您必须自己执行Web请求并检查内容类型的HTTP标头。

然而,这可能是不准确的,具体取决于服务器。

答案 4 :(得分:0)

一个选择是使用System.Net.Http中的HttpClient而不是

HttpClient client = new HttpClient();

HttpResponseMessage res = await client.GetAsync("https://picsum.photos/200/300");

bool IsTypeImage = res.ToString().Contains("Content-Type: image");