现在的位置: 首页 > 综合 > 正文

利用HttpWebRequest/HttpWebResponse获得指定url资源的一个问题

2011年06月06日 ⁄ 综合 ⁄ 共 1082字 ⁄ 字号 评论关闭

前阵子帮朋友找图片,写了个小程序抓图片资源。但是过程中碰到了个小问题。通过HttpWebResponse.GetResponseStream()获得的流保存成文件却显示不出原来的图片。

Uri myUri = new Uri(“http://www.xxx.com/xx.jpg");

HttpWebRequest myWebRequest
= (HttpWebRequest)WebRequest.Create(myUri);

myWebRequest.Method 
= "GET";

HttpWebResponse  myWebResponse
= (HttpWebResponse)myWebRequest.GetResponse();

StreamReader reader 
= new StreamReader(myWebResponse.GetResponseStream(),Encoding.ASCII);

byte[] buffer = Encoding.ASCII.GetBytes(reader.ReadToEnd());
FileInfo file 
= new FileInfo(@"C:\xxx.jpg");
BinaryWriter writer 
= new BinaryWriter(file.Open(FileMode.Create, FileAccess.Write));
writer.Write(buffer, 
0, buffer.Length);

writer.Close();

开始用Encoding.Default,取出来的字节流长度(buffer.Length)和原始图片的长度(myWebRequest.ContentLength)都不符,很明显是Encoder的问题,换了ASCII,长度一致了,但是还是无法显示。把Reader对象Reflect了一下,又看了以下Encoding.ASCII,发现其GetBytes里有这么一段:

while (charIndex < num1)
{
    
char ch1 = chars[charIndex++];
    
if (ch1 >= '\x0080')
    
{
      ch1 
= '?';
    }

    bytes[byteIndex
++= (byte) ch1;
}

原来的字节流并不是原封不动的被保存了,结果肯定会无法显示正常的图片。

没办法只好换了个办法,直接用Bitmap对象来保存图片。虽然结果是没问题了。但是之前的这种保存方式难道就完全不可行了吗?不知道哪位高人可以给一个正解。

抱歉!评论已关闭.