有没有办法可以检测到图片网址,例如:
http://mysite.com/image.jpg
但也有其他格式?我在.NET 4.0中使用C#。
像
这样的东西bool isImageUrl(string URL){
}
编辑我的意思是,如果网址指向图片。例如,URL
http://mysite.com/image.jpg
是有效图片,但
http://mysite.com/image
不是。
答案 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");