问几个关于网络文件传输的问题:1、如何在下载前知道待下载文件资源的大小?资源可能是任意的互联网资源(而不仅仅是自己服务器上的资源)。就像 FlashGet 和迅雷一样,下载前都会显示下载文件的大小。
   webRespone.ContentLength 只能在下载完成时获得。
   WebClient.DownloadFile 根本无法获取文件的大小。
2、如何监控下载的进度(或估算下载的速度),也就是如何获取已经下载的字节数?
   开另外的线程去监视磁盘上文件的大小的话,由于下载时刷新到硬盘的时间不确定,因而有时根本无法知道下载的速度。比较小文件干脆直接从 0 跳到文件的长度(已知文件长度的情况下),大的文件则可能是“跳步”,算出的下载速度极度不均匀(但是用 FlashGet 单线程下载仍然是均匀的。
3、如何将文件传送到指定的地址。也就是 P2P 文件传送......
4、如何实现多线程下载/上传?

解决方案 »

  1.   

    Httprequest的Head方法原来检测大小
    分块传输,每个线程负责一小块,最后主线程负责将文件合并。在日志里记录,可以实现断点上传下载
      

  2.   

    抱歉,没有找到 Head 方法……能不能给个具体的方法?
      

  3.   

    request.method = "HEAD" ;
      

  4.   

    是这样吗?
    ......
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost/softs/os/WINXPPRO.iso");
    request.Method = "HEAD";
    long size = request.GetResponse().ContentLength;
    ....然后下载时把 Method 设定为 "GET"。这样对吧?(好像 GET 过,)
    不对的话有应该怎样?
    另外,分段下载文件时,怎么指定下载的区段?(比如如何告诉一个线程去下载 0-4096 KB 部分的内容,另外一个线程去下载 4091-8192 KB 范围的内容??
      

  5.   

    up   up   up
      

  6.   

    顶的人比解决问题的人多啊……有哪位高手帮看下......
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost/softs/os/WINXPPRO.iso");
    request.Method = "HEAD";
    long size = request.GetResponse().ContentLength;
    ....的写法是否正确?