【发布时间】:2019-04-26 17:35:57
【问题描述】:
查看 FTP 服务器上损坏的文件,我考虑通过在上传后立即下载并逐字节比较来验证使用 TIdFtp.Put 上传的文件。
我认为TIdFtp理论上可能是在缓存数据并从缓存中返回而不是实际下载。
请减轻或确认我的疑虑。
【问题讨论】:
-
我不这么认为。这个假设基于什么?
查看 FTP 服务器上损坏的文件,我考虑通过在上传后立即下载并逐字节比较来验证使用 TIdFtp.Put 上传的文件。
我认为TIdFtp理论上可能是在缓存数据并从缓存中返回而不是实际下载。
请减轻或确认我的疑虑。
【问题讨论】:
不,没有缓存,因为一般 FTP 协议中没有这样的东西。 TIdFTP 仅处理实时数据。
您是否正在以 ASCII 模式上传二进制文件?如果是这样,那将在传输过程中改变换行符(CR 和 LF)。这是一个常见的错误,因为 ASCII 是 FTP 的默认模式。确保在传输文件之前根据需要设置 TIdFTP.TransferType 属性。 ASCII 模式应该只用于文本文件,如果使用的话。
而 FWIW,您可能不需要下载文件来验证其字节。如果服务器支持任何X<Hash> 命令(其中Hash 可以是SHA512、SHA256、SHA1、MD5 或CRC),TIdFTP 具有使用它们的VerifyFile() 方法。它计算本地文件的哈希值,然后将其与服务器为远程文件计算的哈希值进行比较。无需传输文件数据。
【讨论】: