C#FtpWebRequest UploadFile,网络中断时自动保存

时间:2014-12-08 14:19:20

标签: .net file-upload large-files ftpwebrequest

当我编写一个工具来上传大文件(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数据时,我可以保存或关闭流) 谢谢!

0 个答案:

没有答案