代码如下:   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();
            }

解决方案 »

  1.   


            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");
            }
    路径问题
      

  2.   


    路径没有问题,图片是能保存下来的。
    只是原本是gif的图片(至少有5帧),保存下来后变成了静态图片(1帧)。
    你可以用这个gif图片做测试
    http://img.hb.aicdn.com/62890e0029bb1c09e514b52bb786185cdc72b6319ed32-ebVNIn_fw554
      

  3.   

    下载文件
    WebClient.DownloadFile即可 using (WebClient wc = new WebClient())
                {
                    wc.DownloadFile(SourceUrl,Request.MapPath("/Images/xx.gif"));               
                }
      

  4.   

    不要 img.Save只要判断是图片格式正确就 直接将imgStream保存成文件imgStream 已经包含了图片的文件头 , 
      

  5.   


    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
      

  6.   

    本帖最后由 net_lover 于 2012-08-18 09:42:31 编辑
      

  7.   


    现在的问题是需要得到下载图片的 宽和高,
    而且图片又是通过FTP上传到另外一台服务器了,
    保存以后在去读取一遍图片文件又会影响性能。有什么办法能把 stream拷贝一份吗?
      

  8.   

    本帖最后由 net_lover 于 2012-08-18 18:42:57 编辑
      

  9.   


    开始我的做法是:
    先将流读入 Image 对象,然后在用FileStream来保存图片。
    结果发现 Image.FromStream()方法会对流做出修改,会导致FileStream得到的流不正确,导致保存图片失败。现在的问题是:用FileStream保存图片你必须先知道图片的格式,
    如上代码是通过截取Url后缀来获取图片格式,
    但对这类没有后缀的图片就不适用了。 还请孟大哥指点。
    http://img.hb.aicdn.com/54075283206aac9ac58eed5be893b9225538b5a813b03-GZFO1l_fw192PS:5楼的兄弟,不知道如何从流中获取图片的文件头,
    用Fiddler嗅探的Http Headers中也没有看到图片信息,你可以用上面的图片地址做测试。
      

  10.   

    WebClient  的头部也是可以自定义的 
    WebClient  只是封装了webrequest 而已WebClient.Header.Add("Referer","http://www.370b.com")
      

  11.   

    以上代码只是例子啊。你就不能改一下吗》?你可以通过resposne.ContentType得到返回的结果类型啊。
    另外,你给的例子是403错误,无法给你测试
      

  12.   


    实在是忘记  WebResponse 有 ContentType 这个属性了,
    一直都在流这里纠结,想通过流来获取文件格式。
     谢谢!