使用WebClient保存具有适当扩展名的图像

时间:2013-08-31 01:16:37

标签: c# .net image webclient

我需要检索并将图像从网站保存到我的本地文件夹。图像类型在.png,.jpg和.gif

之间变化

我尝试过使用

string url = @"http://redsox.tcs.auckland.ac.nz/CSS/CSService.svc/";
string saveLoc = @"/project1/home_image";
using (var wc = new WebClient())
{
    wc.DownloadFile(url, saveLoc);
}

但这会将文件'home_image'保存在没有扩展名的文件夹中。我的问题是你如何确定扩展名?有一个简单的方法吗?可以使用HTTP请求的Content-Type吗?如果是这样,你怎么做?

2 个答案:

答案 0 :(得分:8)

如果您想使用WebClient,则必须从WebClient.ResponseHeaders中提取标题信息。您必须先将其存储为字节数组,然后在获取文件信息后保存文件。

string url = @"http://redsox.tcs.auckland.ac.nz/CSS/CSService.svc/";
string saveLoc = @"/project1/home_image";

using (WebClient wc = new WebClient())
{
    byte[] fileBytes = wc.DownloadData(url);

    string fileType = wc.ResponseHeaders[HttpResponseHeader.ContentType];

    if (fileType != null)
    {
        switch (fileType)
        {
            case "image/jpeg":
                saveloc += ".jpg";
                break;
            case "image/gif":
                saveloc += ".gif";
                break;
            case "image/png":
                saveloc += ".png";
                break;
            default:
                break;
        }

        System.IO.File.WriteAllBytes(saveloc, fileBytes);
    }
}

如果可以的话,我喜欢我的扩展名为3个字母....个人偏好。如果它不打扰您,您可以将整个switch语句替换为:

saveloc += "." + fileType.Substring(fileType.IndexOf('/') + 1);

使代码更整洁。

答案 1 :(得分:0)

尝试这样的事情

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create("Your URL");
 request.Method = "GET";
 var response = request.GetResponse();
 var contenttype = response.Headers["Content-Type"]; //Get the content type and extract the extension.
 var stream = response.GetResponseStream();

然后保存流