当我编写一个工具来上传大文件(1-2GB)时,使用" .Net FtpWebRequest"。 这是我的代码的一部分:
FtpWebRequest reqFtp = (FtpWebRequest)WebRequest.Create(fileUri);
reqFtp.Credentials = new NetworkCredential(_ftpUserName, _ftpPassWord);
reqFtp.KeepAlive = false;
reqFtp.Method = WebRequestMethods.Ftp.UploadFile;
reqFtp.UseBinary = true;
reqFtp.ContentLength = fileInf.Length;
const int buffLength = 2048;
byte[] buff = new byte[buffLength];
FileStream fs = fileInf.OpenRead();
Stream strm = reqFtp.GetRequestStream();
double totalLength = Convert.ToDouble((fs.Length + 0.0) / 1024 / 1024);
try
{
int contentLen = fs.Read(buff, 0, buffLength);
double uploadLength = (contentLen + 0.0) / 1024 / 1024;
double percentage = 0.0;
while (contentLen != 0 && !(panel.Stop))
{
percentage = uploadLength*100/totalLength;
if (panel.ProgressBar.InvokeRequired)
{
UpdateProcessBarDelegate d = UpdateProgressBarValue;
panel.ProgressBar.Invoke(d, panel.ProgressBar, (int)percentage);
}
else
{
panel.ProgressBar.Value = (int)percentage;
}
strm.Write(buff, 0, buffLength);
contentLen = fs.Read(buff, 0, buffLength);
uploadLength += (contentLen + 0.0) / 1024 / 1024;
}
strm.Close();
fs.Close();
}
它适用于暂停和延续功能。 但是当网络中断时,所有这些流都不会被写入ftp服务器。 我认为只有在你调用" strm.Close()"
时才写入ftp服务器我怎么能意识到当网络中断时,这个文件流将在ftp服务器上写入? (当我上传每10MB数据时,我可以保存或关闭流) 谢谢!