如何在中断互联网后继续或恢复FTP上传

我使用下面的代码(C#.NET 3.5)上传文件:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://someweb.mn/altanzulpharm/file12.zip"); request.Method = WebRequestMethods.Ftp.UploadFile; request.KeepAlive = true; request.UseBinary = true; request.Credentials = new NetworkCredential(username, password); FileStream fs = File.OpenRead(FilePath); byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); fs.Close(); Stream ftpstream = request.GetRequestStream(); ftpstream.Write(buffer, 0, buffer.Length); ftpstream.Close(); 

但是当互联网中断时,上传会中断。 中断发生的时间非常短,几乎是一毫秒。 但永远上传rest!

互联网中断后是否可以继续或继续上传?

我不相信FtpWebRequest在失去连接后支持重新连接。 如果服务器支持,您可以从给定位置恢复上载(不需要此支持,并且可能不太常见,重试下载)。

您需要设置FtpWebRequet.ContentOffset上传。 文章中的部分样本:

 FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri); request.ContentOffset = offset; 

FTP协议本身还原的内部细节 – RFC959:3.5 – 错误恢复和重启 。 显示下载重试代码的问题 – 使用c#从FTP下载,失败时无法重试

在使用FtpWebRequest中断连接后恢复传输的唯一方法是重新连接并开始写入文件的末尾。

为此使用FtpWebRequest.ContentOffset


或者使用可以自动恢复传输的FTP库。

例如WinSCP .NET程序集 。 有了它,可恢复上传就像以下一样简单:

 # Load WinSCP .NET assembly Add-Type -Path "WinSCPnet.dll" # Setup session options $sessionOptions = New-Object WinSCP.SessionOptions -Property @{ Protocol = [WinSCP.Protocol]::Ftp HostName = "ftp.example.com" UserName = "user" Password = "mypassword" } $session = New-Object WinSCP.Session # Connect $session.Open($sessionOptions) # Resumable upload $transferResult = $session.PutFiles("C:\path\file.zip", "/home/user/file.zip").Check() 

(我是WinSCP的作者)