NGU_ALLIN 2019-01-04 19:41 采纳率: 0%
浏览 1916

SFTP 上传文件问题(目标文件大小比源文件小,)

使用java代码上传我文件,用的是JSch 的包, 实际操作代码是:

channelSftp.put(filePath,dstFile,new MyProgressMonitor(),ChannelSftp.OVERWRITE);

channelSftp.quit();

if (channelSftp != null && channelSftp.isConnected()){
        channelSftp.disconnect();
}

if (session != null && session.isConnected()){
        session.disconnect();
}

filePath是源文件,dstFile是目标文件,
源文件大小是 600k,上传完成后目标文件的大小是580k,

目标主机也没有限制上传文件的大小 ,代买实在是找不到问题在哪,还望大牛们指点一二!!!

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 15:30
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在你的代码中,你似乎没有正确地处理了目标文件的实际大小。当你在远程服务器上运行 put 方法时,它会将源文件的所有内容都复制到目标文件中,并且如果目标文件已经存在,则覆盖原有的内容。

    然而,在你的情况中,目标文件的实际大小确实小于源文件的大小。这意味着在 put 方法返回后,目标文件实际上只包含一部分内容,而不是源文件全部的内容。

    要解决这个问题,你需要确保在 put 方法之后,你可以检查目标文件的实际大小是否与源文件相匹配。这可以通过比较目标文件和源文件的长度来实现:

    long sourceLength = Files.size(Paths.get(filePath));
    long destinationLength = Files.size(Paths.get(dstFile));
    
    // 如果目标文件的实际大小小于源文件的大小,则表明目标文件被覆盖了。
    if (destinationLength < sourceLength) {
        // 处理这种情况,例如删除目标文件以重试
    } else if (destinationLength == sourceLength) {
        // 目标文件大小等于源文件大小,可以继续执行后续步骤
    }
    

    请注意,这个方法可能无法完全解决问题,因为目标文件的大小可能会因网络延迟或其他原因而发生变化。但是,它可以作为一个起点,帮助你诊断问题所在。

    评论

报告相同问题?