ftpclient查看服务器文件,使用Apache FtpClient在FTP服务器中计算文件校验和

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

我的问题是:是否需要在ftp服务器中计算文件校验和? 如果答案是肯定的,如何在FtpClient中获取校验和?

如果答案是否定的,FtpClient如何知道文件是否确实已成功且完全传输?

对于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

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

if (FTPReply.isPositiveCompletion(ftpClient.sendCommand("XSHA1","filename"))

{

String[] reply = ftpClient.getReplyStrings();

}

(我是WinSCP的作者)

如果服务器不支持任何校验和命令,则没有太多选择:

重新下载文件并在本地检查。

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

感谢您的回复。根据您的帖子,这是一种计算FTP服务器中文件校验和的方法,但是我想问另一个问题:您确定所有FTP服务器都支持您列出的一个或多个命令吗?就我而言,将来可能需要更改FTP服务器,因此我们无法检查FTP服务器支持哪些命令,也无法对命令进行硬编码。您还有其他选择吗?

关于您的问题:根据我的回答,有些服务器不支持任何校验和命令:您需要检查FTP服务器支持什么(如果有)。除了下载文件并在本地检查文件外,没有其他基于FTP的解决方案。

好,知道了但是,如果不使用加密怎么办?只是正常传输,仅检查FTP服务器上的文件长度就足够了吗?

仅检查文件大小是不够的,总比没有好。

这是一个很长的路要走,但是如果服务器支持php,则可以利用它。

将以下内容另存为php文件(例如check.php),与name_of_file.txt文件位于同一文件夹中:

php

echo md5_file('name_of_file.txt');

php>

然后,访问页面check.php,您应该获取文件的md5哈希值。

相关问题:

FTP:复制,检查完整性并删除

如何在SFTP文件传输期间执行校验和以确保数据完整性?

https://serverfault.com/q/98597/401691

只是我如何实现这一点的补充。当处理标准ftp服务器而没有加载用于校验和检查的任何额外模块时,我所做的就是在每个文件到SFV文件中创建一个MD5 CRC哈希值列表。称其为uploads.sfv(与sfv生成器的格式相同)。这使您可以进行进一步的校验和检查。

有关服务器端支持校验和检查支持的示例:

cuftpd,glftpd的PZS-ng

ProFTPD的mod_digest

当然,正如@MartinPrikryl所强调的那样,这些都不是标准化的。

它是一种验证文件完整性的方法。但是我想知道的是,是否有一种方法可以使用Apache的FTPClient在FTP中计算远程文件校验和,因为我没有找到可以使用的任何API。

我知道了,但是正如所说的那样,在发表评论时尚无标准。但是,您只能按照上面的说明操作,用sfv上传,并且在下载文件时获得sfv并计算每个文件自己的校验和并与sfv比较。