zoukankan      html  css  js  c++  java
  • 使用http协议下载网络图片

         出于公司的一个需求,我要写一个下载网易微博的一个头像,但是网易微博的的图片是不允许外链的,所以我们只下载它,好了动手了,呵呵

        一开始我用这样来读流

     
     using (var stream = response.GetResponseStream())
                {


                    //byte[] bytes = new byte[stream.Length];
                    //stream.Read(bytes, 0, bytes.Length);
                    //// 设置当前流的位置为流的开始   
                    //stream.Seek(0, SeekOrigin.Begin);

                }

    但是提示说,Strem不支持seek ,一到strem.length就开始报错,原因就在于 一个值得探索的未知

      所以只能用折中的方式来替代了

      byte[] photocontent = new Byte[response.ContentLength];
                     stream.Read(photocontent, 
    0, (int)response.ContentLength );


    需要特别注意的是//stream.Read(content, 0, (int)webreponse.ContentLength );

    //只能读取到3799字节的数据,在网上查了好久,没有找到怎么回事,后来,想到了解决大文件上传显示进度问题时,用到的//HttpWorkerRequest.ReadEntityBod(),需要检测是否读取完毕,进行多次读取才可以。

    代码
    int readecount = 0;
                    
    while (readecount < (int)webreponse.ContentLength)
                    {
                        readecount 
    += stream.Read(photocontent, readecount, (int)webreponse.ContentLength - readecount);


                    }


     

     剩下就是我下载163 的图片的全部过程了

    代码
     Uri uri = new Uri("http://oimagec4.ydstatic.com/image?w=48&h=48&url=http%3A%2F%2Fos.blog.163.com%2Fcommon%2Ftinyava.s%3Fhost%3Dthetimeweekly%26type%3D1%26rnd%3D0.28753444320203836");
                var request 
    = WebRequest.Create(uri) as HttpWebRequest;
                request.AllowAutoRedirect 
    = true;
                request.UserAgent 
    = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
                request.Timeout 
    = 6000;
                request.AutomaticDecompression 
    = DecompressionMethods.Deflate | DecompressionMethods.GZip;
                request.Headers[
    "Accept-Encoding"= "gzip, deflate";
                request.Accept 
    = "*/*";
                
    //request.Headers["host"] = "www.aqlife.com";
                
    //request.Connection = "Keep-Alive";
                var response = request.GetResponse() as HttpWebResponse;
                
    using (var stream = response.GetResponseStream())
                {
                    
    //var bmp = new Bitmap(stream);
                    
    //this.pictureBox1.Image = bmp;
                    
    // stream.to              
                     byte[] photocontent = new Byte[response.ContentLength];
                     stream.Read(photocontent, 
    0, (int)response.ContentLength );
                   
                  
                }

    欢迎大家拍砖。


  • 相关阅读:
    QTableWidget的使用和美工总结
    pyqt下QTableWidget使用方法小结(转)
    改变QTableWidget 行高(转)
    Qt中 文件对话框QFileDialog 的使用
    Qt:拖拽图片到QLabel上并显示(转)
    Qt获取组合键(转)
    Qt图片显示效率的比较(转)
    QComboBox用法小列(转)
    TinyXML:一个优秀的C++ XML解析器(转)
    JZOJ 3099. Vigenère密码 NOIP2012
  • 原文地址:https://www.cnblogs.com/chenli0513/p/1906833.html
Copyright © 2011-2022 走看看