我必须检查图像是jpg还是png(或者没有图像)并返回格式。我有一张图片的“ID”,我必须在网上查询并猜测格式。
我有两个案例:
mydomain.com/ID.jpg
mydomain.com/ID.png
如果无效,则返回“error”或“unknown type”,否则返回图像类型。
我尝试了各种方法,但由于某种原因我得到了例外,我无法使其正常工作。
首先,我尝试了这个,但我得到了网络异常。
using (WebClient wc = new WebClient())
{
try
{
if (wc.DownloadString(mydomain.com/ID.png).Contains("PNG"))
{
wc.DownloadFile(url, filepath);
}
else
{
wc.DownloadFile(url, filepath);
}
}
catch (WebException ex)
{
if (ex.Response != null && ex.Status == WebExceptionStatus.ProtocolError)
{
var resp = (HttpWebResponse)ex.Response;
if (resp.StatusCode == HttpStatusCode.Forbidden || resp.StatusCode == HttpStatusCode.NotFound)
{
continue;
}
}
throw;
}
}
然后我尝试了一个函数来检查一个URL是否是一个图像,然后调用它
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/");
}
}
这样称呼:
try
{
if (IsImageUrl("mydomain.com/ID.jpg"))
{
MessageBox.Show("jpg");
}
else
{
MessageBox.Show("png");
}
}
catch (Exception ex)
{
MessageBox.Show("other format or error");
}
我也试过这个:
try
{
HttpWebRequest request = HttpWebRequest.Create("mydomain.com/ID.jpg") as HttpWebRequest;
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
string contentType = "";
if (response != null)
contentType = response.ContentType;
MessageBox.Show(contentType);
}
catch (WebException ex)
{
if (ex.Response != null && ex.Status == WebExceptionStatus.ProtocolError)
{
var resp = (HttpWebResponse)ex.Response;
if (resp.StatusCode == HttpStatusCode.Forbidden || resp.StatusCode == HttpStatusCode.NotFound)
{
//continue;
}
}
throw;
}
但我仍然遇到同样的问题,它抛出一个异常而不是返回它..
所以,我的问题是:鉴于帖子开头的情况,我需要检查两个网址,在每个网址的末尾添加.jpg和.png,其中一个是否有效,如果是,返回哪个(格式),否则返回“未知格式”。