我正在使用Kellerman .NET SFTP Library而我正在努力解决其中一种方法。
根据documentation我可以在连接恢复后调用此方法恢复文件上传。
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());
}
我已启用日志记录以查看正在发生的事情。
当我失去与Internet的连接时,我得到以下错误,这是可以理解的。
消息:System.Net.Sockets.SocketException(0x80004005):没有这样的主机是kn 自己的
然后我启用了我的互联网连接,这就是我得到的:
打开“ ** @ tt-sftp”22
0已连接
通过:**
0密码接受
ReconnectRetry:强制连接成功
ResumeUploadFileAsync \ tt-e \ CompressedArchive \ 20140926 \ 20140926.zip,
20140926.zip ReconnectRetry:pwd成功
断开
0与服务器断开连接 GetFileSize 20140926.zip
打开“ ** @ tt-sftp”22
0已连接
通过:**
0密码接受
ReconnectRetry:重新连接成功
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.ChannelSf tp.put(InputStream src,String dst,SftpProgressMonitor监视器,Int32模式) 在KellermanSoftware.NetSFtpLibrary.Implementation.ExternalSFTPChannel.PutBin ary(Stream localStream,String remoteFileName,Int64 restart,IFireProgress fire 进展)
GetDirectoryListing sam /
ls。 SAM /
当我去SFTP时,我实际上看到.zip文件,但它只包含一个文件(缺少其他文件)并且它已损坏。我无法查看它,也无法使用SFTP Client FileZilla将其下载回来。
有关如何使用我的方法解决此问题的任何建议,还是有更好的方法可以在互联网连接恢复后再次开始上传?
谢谢。
答案 0 :(得分:0)
无需编码。它是图书馆的内置功能。我学到的东西很少:
sftp.ResumeUploadFileAsync("c:\\uploadfile1.txt", "uploadfile1.txt");
只有在程序中具有允许用户停止上传的功能时,才能使用此方法。这种方法可以让他们再次开始上传。
如果它是控制台应用程序并且您使用的是try {} catch {}
语句,请确保Console.ReadLine()
语句中包含catch
。否则,应用程序将关闭,无法重试上传。