C# 使用ftpwebrequest上载大文件无法完成

C# 使用ftpwebrequest上载大文件无法完成,c#,ftp,uploading,ftpwebrequest,large-file-upload,C#,Ftp,Uploading,Ftpwebrequest,Large File Upload,我设计的软件使用ftp将文件上传到我的服务器,我使用ftpwebrequest完成所有上传。当上传一个700mb的文件时,它会上传大约500MB,然后停止。上传较小的文件时,它工作正常。较小的文件上传成功,但它只想在较大的文件上正常工作。我在后台工作人员中完成上传,该工作人员将上传进度报告给主客户端上的进度条。后台工作程序完成后,将执行后台工作程序完成功能。后台工作程序已完成函数被执行,但上载从未完成,进度条被卡在约65%的位置,就像客户端停止上载并执行后台工作程序已完成函数一样。这里可能出现的

我设计的软件使用ftp将文件上传到我的服务器,我使用ftpwebrequest完成所有上传。当上传一个700mb的文件时,它会上传大约500MB,然后停止。上传较小的文件时,它工作正常。较小的文件上传成功,但它只想在较大的文件上正常工作。我在后台工作人员中完成上传,该工作人员将上传进度报告给主客户端上的进度条。后台工作程序完成后,将执行后台工作程序完成功能。后台工作程序已完成函数被执行,但上载从未完成,进度条被卡在约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;
            }
        }
}
void UploadFileInBackground\u DoWork(对象发送方,DoWorkEventArgs e)
{
字节[]数据;
int packetsize=1024*8;
string Destination=UploadURI+cattext+“/”+ID+“.obj”;
字符串源=DialogBrower.FileName;
FtpWebRequest=(FtpWebRequest)WebRequest.Create(Destination);
request.Credentials=新网络凭据(“用户”、“通过”);
request.Method=WebRequestMethods.Ftp.UploadFile;
request.usesponsive=true;
request.UseBinary=true;
request.KeepAlive=false;
使用(FileStream fs=newfilestream(source,FileMode.Open,FileAccess.Read))
{
尝试
{
long filesize=fs.Length;
长和=0;
整数计数=0;
数据=新字节[packetsize];
Stream reqStream=request.GetRequestStream();
float totalpackits=filesize/packetsize;
包装的浮动重量=100/总包装箱;
浮动百分比=0;
while(总和<文件大小)
{
列表状态参数=新列表();
count=fs.Read(数据,0,packetsize);
请求流写入(数据,0,计数);
总和+=计数;
百分比+=包装的重量;
int percentagetotal=转换为32(数学四舍五入(百分比));
statusparms.Add(sum.ToString());
statusparms.Add(filesize.ToString());
UploadFileInBackground.ReportProgress(百分比总计,状态参数);
}
reqStream.Close();
uploadedname=uploadingname;
}
最后
{
fs.Dispose();
数据=空;
}
}
}

请尝试以下方法:

request.UseBinary = false;
让我们试试这个

request.KeepAlive = false;


我已经编辑了你的标题。请参阅“”,其中的共识是“不,他们不应该”。
request.KeepAlive = true;