使用 JSch 库上传重试机制

用户3742125

我有一个文件要上传(比如说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. put没有抛出的情况下完成,文件大小不匹配的可能性很小它几乎不可能发生。即使发生了,调用 也没有多大意义RESUME如果发生了 未检测到的灾难性错误putRESUME则不太可能有帮助。

    即使您想尝试使用RESUME,尝试一次也是没有意义的。如果您认为重试是有意义的,那么您必须不断重试直到成功,而不仅仅是一次。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 Retrofit 时重试机制的最佳实践是什么?

来自分类Dev

如何使用vm事务实现ftp出站端点的重试机制?

来自分类Dev

如何使用JSch判断SFTP上传是否成功

来自分类Dev

如何使用Java JSch库逐行读取远程文件?

来自分类Dev

无法使用 jsch 库执行 .csh 脚本 - 退出 1

来自分类Dev

使用JSch拒绝权限

来自分类Dev

使用JSch执行命令

来自分类Dev

CloudQueueMessage-重试机制

来自分类Dev

JSch SFTP文件上传/下载-为什么使用返回流的方法?

来自分类Dev

JSch SFTP文件上传/下载-为什么使用返回流的方法?

来自分类Dev

使用JSch连接到远程Windows机器

来自分类Dev

shell提示使用jsch触发多个命令

来自分类Dev

使用JSCH的SSH连接,Android上的UnknownHostException

来自分类Dev

无法使用jsch运行top命令

来自分类Dev

使用JSCH Java的反向SSH隧道

来自分类Dev

“无效的专用密钥”使用JSch时

来自分类Dev

使用JSCH Java的反向SSH隧道

来自分类Dev

在JSch(ssh)中使用root命令

来自分类Dev

使用 Jsch 进行异步 sftp 文件传输?

来自分类Dev

未执行使用 ChannelExec 的命令 - Jsch

来自分类Dev

如何使用 Jsch 递归 FTP 目录结构?

来自分类Dev

无法使用 jsch 执行 sftp 子命令

来自分类Dev

Web服务调用的重试机制

来自分类Dev

Android SyncAdapter中的重试机制

来自分类Dev

Azure存储队列-重试机制实现

来自分类Dev

JSch库中SCP协议实现的说明

来自分类Dev

使用SFTP和JSch的连接问题:com.jcraft.jsch.JSchException

来自分类Dev

使用SFTP或SCP使用JSch更改文件权限

来自分类Dev

使用多个线程使用JSch下载文件