首页 新闻 会员 周边

WebResponse和WebRequest下载文件的问题,如下,直接看代码

0
[已解决问题] 解决于 2015-06-01 17:28

//WebClient下载图片
            WebClient client = new WebClient();
            client.BaseAddress = @"http://img.ui.cn/";
            client.DownloadFile(@"data/file/4/7/6/134674.jpg", "D:\\1234.jpg");

            //WebResponse WebRequest下载图片
            WebRequest request = WebRequest.Create(@"http://img.ui.cn/data/file/4/7/6/134674.jpg");
            WebResponse response = request.GetResponse();
            using (Stream s = response.GetResponseStream())
            {
                byte[] data = new byte[response.ContentLength];
                s.Read(data, 0, data.Length);

                using (FileStream fileS = new FileStream(@"D:\123.jpg", FileMode.Create))
                {
                    #region 读取方式一
                    int temp = default(byte);
                    while ((temp = s.ReadByte()) != -1)
                    {
                        fileS.WriteByte((byte)temp);
                    }
                    #endregion
                    
                    #region 读取方式二
                    fileS.Write(data, 0, data.Length);
                    #endregion

                    fileS.Flush();
                }
            }

//=============

在使用fileStream保存文件时,方式一能够成功且正常,方式二下载的图片有问题,但不知道为什么?

问题补充:

正常的结果就是在网页上看到的样子,图片链接可以从代码里找,

不正常的结果如下,像素丢失:

北在北方的主页 北在北方 | 初学一级 | 园豆:180
提问于:2015-06-01 15:29
< >
分享
最佳答案
1
方式2

int i = 0;
byte[] data = new byte[reponse.ContentLength];

while ((i = s.Read(data, 0, data.Length)) > 0) {

   // Read 方法不是传多长就读多长的, 返回值才是实际读取的长度.    

    fileS.Write(data, 0, i);
}
奖励园豆:5
过于执著 | 菜鸟二级 |园豆:339 | 2015-06-01 17:03

还有 你得考虑 contentencoding 是不是 gzip

过于执著 | 园豆:339 (菜鸟二级) | 2015-06-01 17:06

data 长度随便写个定值就行了(1024), 没准 reponse.ContentLength 太大,

过于执著 | 园豆:339 (菜鸟二级) | 2015-06-01 17:07
其他回答(1)
1

  能说清楚是什么问题或者来个问题截图? 

请叫我头头哥 | 园豆:9382 (大侠五级) | 2015-06-01 15:56

问题已补充。

支持(0) 反对(0) 北在北方 | 园豆:180 (初学一级) | 2015-06-01 16:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册