Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image .NET:验证URL是否为图像_Image_Url_Verify - Fatal编程技术网

Image .NET:验证URL是否为图像

Image .NET:验证URL是否为图像,image,url,verify,Image,Url,Verify,我需要验证用户指定的URL是否指向图像。所以我真的需要一种方法来确定URL字符串指向有效的图像。如何在.NET中执行此操作?如果不下载文件(至少是其中的一部分),则无法执行此操作。使用WebClient获取URL,然后尝试从返回的字节[]创建新的位图。如果成功的话,这真的是一个形象。否则,它将在进程的某个地方抛出异常 顺便说一句,您可以发出HEAD请求,并检查响应中的内容类型头(如果有)。然而,这种方法并非万无一失。服务器可以使用无效的内容类型标题进行响应。我将使用HttpWebRequest获

我需要验证用户指定的URL是否指向图像。所以我真的需要一种方法来确定URL字符串指向有效的图像。如何在.NET中执行此操作?

如果不下载文件(至少是其中的一部分),则无法执行此操作。使用
WebClient
获取URL,然后尝试从返回的
字节[]
创建新的
位图。如果成功的话,这真的是一个形象。否则,它将在进程的某个地方抛出异常


顺便说一句,您可以发出
HEAD
请求,并检查响应中的
内容类型
头(如果有)。然而,这种方法并非万无一失。服务器可以使用无效的
内容类型
标题进行响应。

我将使用HttpWebRequest获取标题,然后检查内容类型,并确保内容长度不为零。

以下是我现在使用的内容。有什么评论吗

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;
    }
}

这将取决于图像有效性的重要性。内容类型通常是有效的,但有些服务器的性能不好,以后可能会出现令人讨厌的异常。下载确实是唯一可以确定的方法。如果链接实际上是指向4.7gb ISO,该怎么办。你真的想下载整个东西并尝试转换成位图来确定它是否是图像吗?如果这是webapp的一部分,那么在DoS中很快就会耗尽你所有的带宽。我认为您应该按照Mike K的建议检查响应头中发送的内容类型,或者检查文件扩展名。如果你真的必须下载,检查内容长度,确保你没有下载任何大得离谱的东西。