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

问题描述 投票:0回答:3

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

我的问题是: ftp server 中是否需要计算文件校验和?
如果是的话,如何在 FtpClient 中计算文件校验和?
如果答案是否定的,FtpClient如何知道文件是否真的已成功且完全传输?

ftp checksum ftp-client apache-commons-net
3个回答
10
投票

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

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

对于 FTP 的校验和计算命令有很多建议。还没有被接受。

最新提案是:
https://datatracker.ietf.org/doc/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) 时,文件在传输过程中损坏的可能性会大大降低。否则接收方(在本例中为服务器)将无法解密数据。因此,如果您确定文件传输已完成(没有解密错误且上传文件的大小与本地原始文件的大小相同),则可以非常确定上传的文件是正确的。

0
投票

只是补充一下我是如何实现这一点的。当处理标准 ftp 服务器而没有加载任何附加模块进行校验和检查时,我所做的就是将每个文件的 MD5 CRC 哈希值列表创建到一个 SFV 文件中。假设它名为 uploads.sfv (与 sfv 生成器的格式相同)。这允许您进行进一步的校验和检查。

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

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


0
投票

这个可能性不大,但如果服务器支持 php,你就可以利用它。

将以下内容另存为

php
文件(例如,
check.php
),与您的
name_of_file.txt
文件位于同一文件夹中:

<? php
echo md5_file('name_of_file.txt');
php>

然后,访问页面

check.php
,您应该会获得文件的 md5 哈希值。

相关问题:

© www.soinside.com 2019 - 2024. All rights reserved.