JSch ChannelSftp.put方法恢复模式

时间:2018-08-02 11:59:53

标签: java sftp jsch

我对JSch的ChannelSftp.put()方法的 RESUME 模式有疑问。

在传输文件时,如果服务器上已经存在具有相同名称但修改日期和大小(大于现有文件)的文件,即文件的版本更高,并且我使用{strong> RESUME运行put()方法模式,然后它将两个文件之间的字节差添加到服务器上现有的文件或覆盖文件。

1 个答案:

答案 0 :(得分:0)

  • 如果目标远程文件已经存在并且大于源本地文件,则ChannelSftp.put会引发异常:

    long skip=0;
    if(mode==RESUME || mode==APPEND){
        try{
          SftpATTRS attr=_stat(dstb);
          skip=attr.getSize();
        }
        catch(Exception eee){
        }
    }
    if(mode==RESUME && skip>0){
        long skipped=src.skip(skip);
        if(skipped<skip){
          throw new SftpException(SSH_FX_FAILURE, "failed to resume for "+dst);
        }
    }
    
  • 根本不考虑修改时间。


总而言之,您可以自行决定恢复传输是否有意义。仅当您已经知道可以恢复传输时,才应使用RESUME标志。