【发布时间】:2012-11-28 12:03:46
【问题描述】:
我设计的软件使用 ftp 将文件上传到我的服务器我使用 ftpwebrequest 进行所有上传。当上传一个 700mb 的文件时,它会上传大约 500mbs 然后停止,它在上传较小的文件时工作正常,较小的文件上传成功,但它只想在大文件上正常工作。我在后台工作人员中完成了上传,该后台工作人员将上传进度报告给主客户端的进度条。当后台工作人员完成时,它会执行后台工作人员完成功能。后台工作人员完成功能被执行,但上传从未完成,进度条停留在大约 65%,就像客户端停止上传并执行后台工作人员完成功能一样,就好像它完成了上传一样。这里可能出了什么问题上传没有完成并且文件没有出现在服务器上这里是上传的代码
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;
}
}
}
【问题讨论】:
-
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
标签: c# ftp uploading ftpwebrequest large-file-upload