备份连接后继续上载文件

本文关键字:上载 文件 继续 连接 备份 | 更新日期: 2023-09-27 18:24:44

我正在使用Kellerman.NET SFTP库,并且正在为其中一个方法而苦苦挣扎。

ResumeUploadFileAsync(方法)

根据文档,我可以调用此方法在连接备份后恢复文件上传。

sftp.ResumeUploadFileAsync("c:''uploadfile1.txt", "uploadfile1.txt");

也许我误解了ResumeUploadFileAsync的概念,但我要做的是在上传过程中,如果我失去了互联网连接,几分钟后就可以了,我希望我的应用程序从它剩下的地方开始上传。

我在C#控制台应用程序中写这篇文章。

这是我采取的方法:

 public static void uploadToSFTP()
 {
   try
     {
            SFTP myConnection = new SFTP();
            myConnection.EnableLogging();
            myConnection.HostAddress = "tt-sftp";
            myConnection.UserName = "username";
            myConnection.Password = "pwd";
            myConnection.CurrentDirectory = "sam";
            myConnection.Connect();
           //upload file
            myConnection.UploadFileAsync(yesterdaysZipFile, localZipFileName);

            bool isConnected = false;
            while (myConnection.IsBusy == true)
            {
                //PRINT HOW LONG REMAINING FROM UPLOAD
                if (myConnection.IsConnected == true)
                {
                    Console.WriteLine(myConnection.EstimatedTimeRemaining);
                }
                else
                {
                    //check for connection
                    while (isConnected == false)
                    {
                        if (myConnection.IsConnected == true)
                        {
                            //resume the upload
                            myConnection.ResumeUploadFileAsync(yesterdaysZipFile, localZipFileName);
                            while (myConnection.IsBusy == true)
                            {
                                Console.WriteLine(myConnection.EstimatedTimeRemaining);
                            }
                            isConnected = true;
                        }
                        else
                        {
                            isConnected = false;
                        }
                    }
                }
            }
          List<FTPFileInfo> _files = myConnection.GetDirectoryListing();
          //there's more code here but it never gets to this point
        }
        catch (Exception ex)
        {
           Console.WriteLine(ex.ToString());
        }

我已经启用了日志记录来查看发生了什么。

当我失去与互联网的连接时,我会出现以下错误,这是可以理解的。

消息:System.Net.Sockets.SocketException(0x80004005):没有这样的主机是kn自有

然后我启用我的互联网连接,这就是我得到的:

打开"**@tt sftp"22
0已连接
通行证:**

0密码已接受
ReconnectRetry:强制连接成功
ResumeUploadFileAsync''tt-e''CompressedArchive''20140926''20140926.zip,
20140926.zip重新连接重试:pwd成功
断开连接
0已断开与服务器的连接
GetFileSize 20140926.zip
打开"**@tt sftp"22
0已连接
通行证:**

0密码已接受
重新连接重试:重新连接成功
pwd
0当前目录为:"/"
cd/sam
cd/sam
0目录现在是/sam
stat 20140926.zip
0目录现在是/sam
0大小0
00:00:00
00:00:00
消息:无法打开文件来源:KellermanSoftware.NET-SFTP-Library目标站点:堆栈跟踪:位于KellermanSoftware.NetSFtpLibrary.Implementation.ChannelSftp.put(InputStream src,String dst,SftpProgressMonitor监视器,Int32模式)位于KellermanSoftware.NetSFtpLibrary.Implementation.ExternalSFTPChannel.PutBinary(流localStream,字符串remoteFileName,Int64重新启动,IFireProgress激发进度)
GetDirectoryListing sam/
lssam/

当我转到SFTP时,我实际上看到了.zip文件,但它只包含一个文件(缺少其他文件),并且已经损坏。我无法查看它,也无法使用SFTP客户端FileZilla下载回来。

关于如何使用我的方法解决这个问题,有什么建议吗?或者有没有更好的更简单的方法可以在互联网连接恢复后再次开始上传?

谢谢。

备份连接后继续上载文件

不需要编码。这是图书馆的一个内置功能。我学到的几件事:

sftp.ResumeUploadFileAsync("c:''uploadfile1.txt", "uploadfile1.txt");

只有当您的程序中有允许用户停止上传的功能时,才能使用此方法。这种方法将允许他们再次开始上传。

如果它是一个控制台应用程序,并且您使用的是try {} catch {}语句,请确保您的catch语句中有Console.ReadLine()。否则,应用程序将被关闭,并且将无法重试上载。