代码如下: HttpWebRequest request = (HttpWebRequest)WebRequest.Create(imgModel.SourceUrl);
request.Referer = Request.UrlReferrer.ToString();
request.UserAgent = Request.UserAgent;
WebResponse response = request.GetResponse();
Stream imgStream = response.GetResponseStream(); if (imgStream != null)
{
Image img = Image.FromStream(imgStream, true, true);
string extension = Common.GetImageFormat(img.RawFormat);
//Bitmap bitmap = new Bitmap(img);//这里用bitmap方式保存也不行
//bitmap.Save(Request.MapPath("/Images/" + Guid.NewGuid().ToString()) + extension, img.RawFormat);
img.Save(Request.MapPath("/Images/" + Guid.NewGuid().ToString()) + extension, img.RawFormat);
WriteAsCrossDomain(Request["jsoncallback"], string.Format("'宽:{0},高:{1}'", img.Width, img.Height));
img.Dispose();
//bitmap.Dispose();
}
request.Referer = Request.UrlReferrer.ToString();
request.UserAgent = Request.UserAgent;
WebResponse response = request.GetResponse();
Stream imgStream = response.GetResponseStream(); if (imgStream != null)
{
Image img = Image.FromStream(imgStream, true, true);
string extension = Common.GetImageFormat(img.RawFormat);
//Bitmap bitmap = new Bitmap(img);//这里用bitmap方式保存也不行
//bitmap.Save(Request.MapPath("/Images/" + Guid.NewGuid().ToString()) + extension, img.RawFormat);
img.Save(Request.MapPath("/Images/" + Guid.NewGuid().ToString()) + extension, img.RawFormat);
WriteAsCrossDomain(Request["jsoncallback"], string.Format("'宽:{0},高:{1}'", img.Width, img.Height));
img.Dispose();
//bitmap.Dispose();
}
string url = "http://u.zhubajie.com//login/verify?seed=502e411b8c95d";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
System.Net.WebResponse response = request.GetResponse();
System.IO.Stream imgStream = response.GetResponseStream();
if (imgStream != null)
{
System.Drawing.Image img = System.Drawing.Image.FromStream(imgStream, true, true);
img.Save(Server.MapPath("./")+Guid.NewGuid().ToString()+".png");
}
路径问题
路径没有问题,图片是能保存下来的。
只是原本是gif的图片(至少有5帧),保存下来后变成了静态图片(1帧)。
你可以用这个gif图片做测试
http://img.hb.aicdn.com/62890e0029bb1c09e514b52bb786185cdc72b6319ed32-ebVNIn_fw554
WebClient.DownloadFile即可 using (WebClient wc = new WebClient())
{
wc.DownloadFile(SourceUrl,Request.MapPath("/Images/xx.gif"));
}
WebClient.DownloadFile 只适用下载一些简单文件。
有些网站会对 HTTP请求的 Header 信息进行验证。
比如百度会对图片的HTTP请求的 Referrer 进行验证。
此项为空时,百度图片服务器会对此次HTTP请求返回 403。
http://image.baidu.com/i?ct=201326592&cl=2&nc=1&lm=-1&st=-1&tn=baiduimage&istype=2&fm=index&pv=&z=0&word=gif
现在的问题是需要得到下载图片的 宽和高,
而且图片又是通过FTP上传到另外一台服务器了,
保存以后在去读取一遍图片文件又会影响性能。有什么办法能把 stream拷贝一份吗?
开始我的做法是:
先将流读入 Image 对象,然后在用FileStream来保存图片。
结果发现 Image.FromStream()方法会对流做出修改,会导致FileStream得到的流不正确,导致保存图片失败。现在的问题是:用FileStream保存图片你必须先知道图片的格式,
如上代码是通过截取Url后缀来获取图片格式,
但对这类没有后缀的图片就不适用了。 还请孟大哥指点。
http://img.hb.aicdn.com/54075283206aac9ac58eed5be893b9225538b5a813b03-GZFO1l_fw192PS:5楼的兄弟,不知道如何从流中获取图片的文件头,
用Fiddler嗅探的Http Headers中也没有看到图片信息,你可以用上面的图片地址做测试。
WebClient 只是封装了webrequest 而已WebClient.Header.Add("Referer","http://www.370b.com")
另外,你给的例子是403错误,无法给你测试
实在是忘记 WebResponse 有 ContentType 这个属性了,
一直都在流这里纠结,想通过流来获取文件格式。
谢谢!