如果是用ftp上传的话。你每次上传前应该告诉服务器你上传这个文件的大小。当你读字节流总数等于文件的总额时,这个时候就上传结束了。

解决方案 »

  1.   

    FileInfo fileInf = new FileInfo(filename); 
      string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name; 
      FtpWebRequest reqFTP;
       
      // 根据uri创建FtpWebRequest对象
      reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name));
       
      // ftp用户名和密码 
      reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
       
      // 默认为true,连接不会被关闭 
      // 在一个命令之后被执行 
      reqFTP.KeepAlive = false;
       
      // 指定执行什么命令 
      reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
       
      // 指定数据传输类型 
      reqFTP.UseBinary = true;
       
      // 上传文件时通知服务器文件的大小 
      reqFTP.ContentLength = fileInf.Length;
       
      // 缓冲大小设置为2kb 
      int buffLength = 2048; 
       
      byte[] buff = new byte[buffLength]; 
      int contentLen;
       
      // 打开一个文件流 (System.IO.FileStream) 去读上传的文件 
      FileStream fs = fileInf.OpenRead();
      try 
      { 
      // 把上传的文件写入流 
      Stream strm = reqFTP.GetRequestStream();
       
      // 每次读文件流的2kb 
      contentLen = fs.Read(buff, 0, buffLength);
       
      // 流内容没有结束 
      while (contentLen != 0) 
      { 
      // 把内容从file stream 写入 upload stream 
      strm.Write(buff, 0, contentLen); 
       
      contentLen = fs.Read(buff, 0, buffLength); 
      }
       
      // 关闭两个流 
      strm.Close(); 
      fs.Close(); 
      } 
      catch (Exception ex) 
      { 
      MessageBox.Show(ex.Message, "Upload Error"); 
      } 
      }