检查图像是jpg还是png

时间:2015-09-03 07:39:15

标签: c# httpwebrequest webclient webrequest httpwebresponse

我必须检查图像是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,其中一个是否有效,如果是,返回哪个(格式),否则返回“未知格式”。

0 个答案:

没有答案