当前位置: 首页 > 知识库问答 >
问题:

使用JSch库的上载重试机制

江敏学
2023-03-14

我有一个文件要上传(比如abc.pdf)。我第一次想将这个文件作为临时文件上传(比如abc.pdf.temp)。然后,如果文件成功传输(完全传输),那么我需要将其重命名为其原始名称(abc.pdf)。但是如果文件没有完全传输,那么我需要删除我最初上传的临时文件,因为我不想在服务器中保留损坏的文件。使用这个JSch库可以做到这一点吗?下面是示例代码。这段代码对实现这一点有意义吗?

示例代码:

originalFile = 'abc.pdf';
tempFile = 'abc.pdf.temp';
fileInputStream = createobject("java", "java.io.FileInputStream").init('C:\abc.pdf'); 
SftpChannel.put(fileInputStream,tempFile);

// Comparing remote file size with local file
if(SftpChannel.lstat(tempFile).getSize() NEQ localFileSize){
    // Allow to Resume the file transfer since the file size is different
    SftpChannel.put(fileInputStream,tempFile,SftpChannel.RESUME); 
    if(SftpChannel.lstat(tempFile).getSize() NEQ localFileSize){
       // Check again if the file is not fully transferred (During RESUME) then
       // deleting the file since dont want to keep a corrupted file in the server.
       SftpChannel.rm(tempFile);
    }
}else{//assuming file is fully transferred
    SftpChannel.rename(tempFile ,originalFile);
}

共有1个答案

敖和韵
2023-03-14

>

  • put不抛出完成后,文件大小不匹配的可能性很小。这几乎不可能发生。即使发生了,调用RESUME也没有什么意义。如果put没有检测到灾难性的错误,RESUME不太可能有帮助。

    而且即使你想尝试使用RESUME,尝试一次也是没有意义的,如果你相信重试是有意义的,你必须不断重试直到成功,而不仅仅是一次。

    您应该捕获异常并恢复/删除/无论如何。这是主要的恢复机制。这比1发生的可能性高100倍。

  •  类似资料:
    • 我正在尝试使用Jsch Sftp通道将一个文件上传到一个IBM大型机,目录必须是“//”,在那里大型机会自动将文件路由到它需要去的地方。 在IBM大型机上的sftp命令会话中,我可以执行以下操作: 我对我的/users/home/myusers目录执行JSch sftp会话完全没有问题,只是无法将其转到//

    • 我正在使用JSCH从SFTP服务器下载文件。我使用单会话,多通道下载文件从不同文件夹位于SFTP。对于这个下载过程,我有一组排定的作业。每项工作将: 每次打开一个新通道()。通道名称:SFTP 使用方法获取要下载的文件总数的大小 如果size(Vector)大于零,则使用下载所有文件 最后关闭打开的通道。 在上面的过程中,大多数时候我得到的文件,找不到或没有这样的文件异常,并没有下载一些文件。 谁

    • 问题内容: 我希望能够从known_hosts中删除远程服务器密钥,然后再次添加它。远程服务器经常更新,因此我想自动删除远程主机密钥并将其新密钥添加到known_hosts。我可以从known_hosts中删除密钥,尽管它很笨拙,并且使用了a 而不是通过JSCH。这可行,但是每当我尝试访问服务器时都会遇到此消息: 我知道可以使用UserInfo解决此消息,但是我使用其他方式连接到远程服务器,例如a

    • 我试图开发一个程序,这是检索一组文件从一个SFTP服务器到另一个本地目录。 下载完成后,我们用他的真实文件名重命名文件(服务器SFTP的文件名)

    • 问题内容: 我正在Android Studio中运行单元测试。我有一个使用以下代码加载本机库的Java类 但是当我在目录中测试此类时,我得到 我如何才能找到位于本地的.so库的路径,以便进行无误的单元测试? 注:里面的目录我有3个子目录:,和。其中的每一个都包含正确的.so文件。我正在使用 非实验版本 来构建NDK库。 我不想使用其他第三方测试库,因为我所有其他“纯” java类都可以进行单元测试

    • 我试图上传一个应用程序到谷歌播放商店,但我得到了下面的错误消息,没有任何进一步的评论: 无法上传。再试一次。 在过去,我已经上传了许多应用程序到Play-Store。我不太确定为什么这个没有通过。有问题的apk是一个签名发行的apk。我很感激你在这方面的帮助。请在Play Store页面找到以下屏幕截图。