我正在使用 Apache Commons Net 的 FtpClient 将视频上传到 FTP 服务器。为了检查文件是否确实已成功传输,我想计算远程文件的校验和,但不幸的是我发现没有相关的API可以使用。
我的问题是: ftp server 中是否需要计算文件校验和?
如果是的话,如何在 FtpClient 中计算文件校验和?
如果答案是否定的,FtpClient如何知道文件是否真的已成功且完全传输?
使用 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
sendCommand
方法执行命令:
if (FTPReply.isPositiveCompletion(ftpClient.sendCommand("XSHA1", "filename"))
{
String[] reply = ftpClient.getReplyStrings();
}
(我是WinSCP的作者)
如果您的服务器不支持任何校验和命令,则您没有太多选择:
只是补充一下我是如何实现这一点的。当处理标准 ftp 服务器而没有加载任何附加模块进行校验和检查时,我所做的就是将每个文件的 MD5 CRC 哈希值列表创建到一个 SFV 文件中。假设它名为 uploads.sfv (与 sfv 生成器的格式相同)。这允许您进行进一步的校验和检查。
服务器端支持校验和检查支持的示例:
当然,正如@MartinPrikryl 所强调的,这些都不是标准化的。
这个可能性不大,但如果服务器支持 php,你就可以利用它。
将以下内容另存为
php
文件(例如,check.php
),与您的 name_of_file.txt
文件位于同一文件夹中:
<? php
echo md5_file('name_of_file.txt');
php>
然后,访问页面
check.php
,您应该会获得文件的 md5 哈希值。
相关问题: