项目中碰到了要求断点上传的需求,项目分为客户端(cs)和服务器端。因为需要经常向服务器端上传很大的文件(1g以下,几百兆吧)经常没有传完就断了。所以要求在客户端增加断点上传的功能。功能简单描述:就是在客户端点击一个按钮或者链接,打开一个cs模式上传窗口,选择文件后确定开始向服务器端传递原本想用ftp或者现成的组件,但因为项目特殊需求,所以不适用。现在我的考虑是用socket或者webservives在客户端把文件拆分一段一段的发送,每发送一次,在服务器端成功接收后,继续下一次发送,并通过一个xml文件在客户端记录下发送情况,当断了时,在通过读取xml进行继续上传但是因为要求很快做出来,我又没有做过socket,webservies,所以一知半解中。例如我发送文件,我怎么能通知客户端什么时候传完,并且上传的文件存放在那一个目录下面等等。有朋友做过这方面的程序,能够给与一些指点么。万分感谢。
2:如果在局域网上,断点续传可以做简单点,只记录一个文件已经传完的位置即可,下次由这个位置启动上传。
static void Main(string[] args) { string StrFileName="c:\\aa.zip"; //根据实际情况设置 string StrUrl="http://www.xxxx.cn/xxxxx.zip"; //根据实际情况设置 //打开上次下载的文件或新建文件 long lStartPos =0; System.IO.FileStream fs; if (System.IO.File.Exists(StrFileName)) { fs= System.IO.File.OpenWrite(StrFileName); lStartPos=fs.Length; fs.Seek(lStartPos,System.IO.SeekOrigin.Current); //移动文件流中的当前指针 } else { fs = new System.IO.FileStream(StrFileName,System.IO.FileMode.Create); lStartPos =0; } //打开网络连接 try { System.Net.HttpWebRequest request =(System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(StrUrl); if ( lStartPos>0) request.AddRange((int)lStartPos); //设置Range值 //向服务器请求,获得服务器回应数据流 System.IO.Stream ns= request.GetResponse().GetResponseStream(); byte[] nbytes = new byte[512]; int nReadSize=0; nReadSize=ns.Read(nbytes,0,512); while( nReadSize >0) { fs.Write(nbytes,0,nReadSize); nReadSize=ns.Read(nbytes,0,512); } fs.Close(); ns.Close(); Console.WriteLine("下载完成"); } catch(Exception ex) { fs.Close(); Console.WriteLine("下载过程中出现错误:"+ex.ToString()); } }