我使用下面的代码(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();
但是当互联网中断时,上传会中断。中断发生的时间非常短,几乎是一毫秒。但永远上传休息!
中断互联网后是否可以继续或继续上传?
答案 0 :(得分:3)
我不相信FtpWebRequest在失去连接后支持重新连接。如果服务器支持,您可以从给定位置恢复上传(此支持不是必需的,并且可能不太常见,需要重试下载)。
您需要设置FtpWebRequet.ContentOffset上传。文章中的部分样本:
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri);
request.ContentOffset = offset;
FTP协议本身恢复的内部细节 - RFC959: 3.5 - Error recovery and restart。显示下载重试代码的问题 - Downloading from FTP with c#, can't retry when fail
答案 1 :(得分:0)
用FtpWebRequest
中断连接后,恢复传输的唯一方法是重新连接并开始写入文件末尾。
为此,请使用FtpWebRequest.ContentOffset
。
或者使用可以自动恢复传输的FTP库。
例如WinSCP .NET assembly。有了它,可恢复的上传就很简单了:
# 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的作者)