使用 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 支持前面提到的所有命令。测试其校验和计算函数 or 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 method:
if (FTPReply.isPositiveCompletion(ftpClient.sendCommand("XSHA1", "filename"))
{
String[] reply = ftpClient.getReplyStrings();
}
(我是WinSCP的作者)
如果您的服务器不支持任何校验和命令,则您没有太多选择:
- 将文件下载回来并在本地检查。
- 使用加密 (TLS/SSL) 时,文件在传输过程中损坏的可能性会大大降低。否则接收方(在本例中为服务器)将无法解密数据。因此,如果您确定文件传输已完成(没有解密错误且上传文件的大小与本地原始文件的大小相同),则可以非常确定上传的文件是正确的。