我需要检索并将图像从网站保存到我的本地文件夹。图像类型在.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吗?如果是这样,你怎么做?
答案 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();
然后保存流