使用Apache FtpClient计算FTP服务器中的文件校验和

Alv*_*vis 4 ftp checksum ftp-client apache-commons-net

我正在使用Apache Commons Net的FtpClient将视频上传到FTP服务器.要检查文件是否确实已成功传输,我想计算远程文件的校验和,但遗憾的是我发现没有可用的相关API.

我的问题是:是否需要在ftp服务器中计算文件校验和?
如果答案是肯定的,那么如何在FtpClient中获取校验和?
如果答案是否定的,那么FtpClient如何知道文件是否真的成功并完全转移?

Mar*_*ryl 10

使用FTP,我建议,以验证上传,如果可能的话.

问题是没有广泛的标准API用于使用FTP计算校验和.

FTP的校验和计算命令有很多建议.尚未被接受.

最新提案是:https:
//tools.ietf.org/html/draft-bryan-ftpext-hash-02

因此,不同的FTP服务器支持不同的校验和命令,语法不同.HASH,XSHA1,XSHA256,XSHA512,XMD5,MD5,XCRC,命名一些.您需要检查FTP服务器支持的内容(如果有).

您可以使用WinSCP进行测试.WinSCP支持所有前面提到的命令.测试其校验和计算功能checksum脚本命令.如果它们有效,请启用日志记录并检查WinSCP对您的服务器使用的命令和语法.

> 2015-04-28 09:19:16.558 XSHA1 /test/file.dat
< 2015-04-28 09:19:22.778 213 a98faefdb2c36ca352a2d9b01668aec6b641cf4b 
Run Code Online (Sandbox Code Playgroud)

然后使用Apache Commons Net sendCommand方法执行命令:

if (FTPReply.isPositiveCompletion(ftpClient.sendCommand("XSHA1", "filename"))
{
    String[] reply = ftpClient.getReplyStrings();
}
Run Code Online (Sandbox Code Playgroud)

(我是WinSCP的作者)


如果您的服务器不支持任何校验和命令,则您没有很多选项:

  • 下载文件并在本地检查.
  • 使用加密(TLS/SSL)时,传输过程中文件损坏的可能性会显着降低.否则,接收方(在这种情况下为服务器)将无法解密数据.因此,如果您确定文件传输已完成(没有解密错误,并且上传文件的大小与原始本地文件的大小相同),您可以非常确定上传的文件是否正确.