【问题标题】:How to continue or resume FTP upload after interruption of internet网络中断后如何继续或恢复 FTP 上传
【发布时间】:2017-06-06 09:28:47
【问题描述】:

我正在使用以下代码 (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();

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

网络中断后是否可以继续或恢复上传?

【问题讨论】:

    标签: c# .net file-upload ftp ftpwebrequest


    【解决方案1】:

    我不相信 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

    【讨论】:

      【解决方案2】:

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

      为此使用FtpWebRequest.ContentOffset

      关于上传完整代码的相关问题(尽管针对 C#):
      How to download FTP files with automatic resume in case of disconnect


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

      例如WinSCP .NET assembly 可以。有了它,可恢复的上传就变得如此简单:

      // Setup session options
      var sessionOptions = new SessionOptions
      {
          Protocol = Protocol.Ftp,
          HostName = "ftp.example.com",
          UserName = "user",
          Password = "mypassword"
      };
      
      using (var session = new Session())
      {
          // Connect
          session.Open(sessionOptions);
      
          // Resumable upload
          session.PutFileToDirectory(@"C:\path\file.zip", "/home/user");
      }
      

      (我是 WinSCP 的作者)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-30
        • 2023-03-24
        • 2019-03-02
        • 1970-01-01
        • 2019-05-18
        • 1970-01-01
        • 2022-08-17
        相关资源
        最近更新 更多