2012-12-11 47 views
0

我的软件设计使用ftp上传文件到我的服务器我使用ftpwebrequest来完成所有上传。当上传一个700mb的文件时,它会上传大约500mbs然后停止,当上传较小的文件时,它可以正常工作,较小的文件成功上传,但它只是想在大文件上正常工作。我有一个后台工作人员完成上传,将上传进度报告给主客户端上的进度条。当后台工作完成时,执行后台工作完成功能。后台工作者完成功能被执行,但上传永不完成,进度条停留在65%左右,就像客户端刚刚停止上传一样,并执行后台工作者完成功能,就像完成上传一样。到底发生了什么错在这里上传未完成和文件剂量不会出现在这里的服务器上该剂量的上传上传大文件使用ftpwebrequest上传不会完成

void UploadFileInBackground_DoWork(object sender,DoWorkEventArgs e) 
{ 
     byte[] data; 
     int packetsize = 1024 * 8; 

     string Destination = UploadURI + cattext + "/" + ID + ".obj"; 
     string source = DialogBrower.FileName; 
     FtpWebRequest request = (FtpWebRequest)WebRequest.Create(Destination); 
     request.Credentials = new NetworkCredential("user", "pass"); 
     request.Method = WebRequestMethods.Ftp.UploadFile; 
     request.UsePassive = true; 
     request.UseBinary = true; 
     request.KeepAlive = false; 
     using (FileStream fs = new FileStream(source, FileMode.Open, FileAccess.Read)) 
     { 
      try 
      { 
       long filesize = fs.Length; 
       long sum = 0; 
       int count = 0; 
       data = new byte[packetsize]; 
       Stream reqStream = request.GetRequestStream(); 
       float totalpackits = filesize/packetsize; 
       float weightofpackit = 100/totalpackits; 
       float percentage = 0; 
       while (sum < filesize) 
       { 
        List<string> statusparms = new List<string>(); 
        count = fs.Read(data, 0, packetsize); 
        reqStream.Write(data, 0, count); 
        sum += count; 
        percentage += weightofpackit; 
        int percentagetotal = Convert.ToInt32(Math.Round(percentage)); 
        statusparms.Add(sum.ToString()); 
        statusparms.Add(filesize.ToString()); 
        UploadFileInBackground.ReportProgress(percentagetotal, statusparms); 
       } 
       reqStream.Close(); 
       uploadedname = uploadingname; 
      } 
      finally 
      { 
       fs.Dispose(); 
       data = null; 
      } 
     } 
} 
+0

我编辑了你的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –

回答

0

代码,请试试这个来代替:

request.UseBinary = false; 
0

让我们尝试这

request.KeepAlive = false; 

request.KeepAlive = true;