delphi - Indy FTP 客户端是否缓存?
问题描述
查看 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()
使用它们的方法。它计算本地文件的哈希值,然后将其与服务器为远程文件计算的哈希值进行比较。不需要传输文件数据。
推荐阅读
- c++ - 在模板化成员函数的返回类型中使用 std::enable_if 时的编译器差异
- twitter - Apache Spark 2.3.1 - twitter 不是包 org.apache.spark.streaming 的成员
- php - Zend Framework - 如何将应用程序细分为两部分?
- nginx - centos7上设置的certbot和nginx子域
- html - 显示类型被未知来源覆盖
- azure - Azure 文本翻译 API v3.0 - 可能的错误代码
- haskell - Haskell 中的 IORef
- android - 如何将当前日期设置为标题栏中的标题?
- http - 如何从 HttpResponseWithStream 中获取 Deedle DataFrame?
- scala - Scala Play 框架:从 QueryStringBindable 访问消息