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