【问题标题】:FTP Upload Problem - 0 bytes transferedFTP 上传问题 - 传输了 0 个字节
【发布时间】:2009-06-30 22:35:09
【问题描述】:

在我们的一个项目中,我们使用了 Apache 的 FTP 客户端 API。 我必须将 xml 文件上传到 FTP 服务器,其中一个进程将继续轮询该服务器目录。因此,使用上传 API,我正在上传扩展名为 .TRANSFER 的 xml 文件,成功上传完整文件后,该文件将重命名为 .xml 文件。

我面临的奇怪问题是,有时文件的文件大小为 0 字节。但有时会完全上传相同的文件。当我查看日志文件时,传输的字节仅为 0 kb。所以我不确定可能是什么问题。

我正在使用 linux 服务器和 Apache 的 commons 的 FTP 客户端 API。

任何调试提示和技巧都会有所帮助。

问候, 斯里尼瓦斯

【问题讨论】:

    标签: apache ftp


    【解决方案1】:

    不久前我也遇到过这种情况。

    我注意到,如果文件大于某个大小(对我来说大约是 174 字节),它确实可以正确传输。较小的文件最终被创建为零字节文件。

    我认为这是 Apache commons ftp 代码中的错误。我通过获取源代码来修复它并进行了快速修复,我构建的生成的 jar 对我们有用。

    如果我没记错的话,我使用 socket.setTcpNoDelay(false) 禁用了 Nagle 的算法,该套接字是用于公共 ftp 代码中的传输的。

    【讨论】:

      【解决方案2】:

      如果它有时发生,它闻起来像是一端的防火墙配置。很难诊断,但开始(如果可以的话)尝试在主动/被动之间切换。

      在这里寻找更好的参考:http://slacksite.com/other/ftp.html

      【讨论】:

        【解决方案3】:

        另一个可能的防火墙配置问题:如果您从配置了 iptables 的 linux/unix 机器进行 ftp,请确保您已将表配置为允许 ftp“连接跟踪”。

        在 ftp 事务过程中,您的客户端机器建立 ftp 连接,然后发出 ftp STOR 命令上传文件。事务的初始部分发生在标准 ftp 套接字 (20,21) 上,然后切换到 ftp 服务器在 ACTIVE 模式下选择的随机高编号端口,如果在 PASSIVE (PASV) 模式下则由客户端选择。如果您处于 ACTIVE 模式,iptables 可能不允许服务器在这个随机选择的端口上与您的客户端计算机进行通信,您将获得一个具有正确名称且没有其他数据的零字节文件。

        您可以通过将事务从客户端切换到 PASSIVE 模式来解决此问题,或者通过在客户端机器上设置 iptables 来进行“连接跟踪”:

        http://www.linuxchix.org/content/courses/security/connection_tracking

        【讨论】:

          【解决方案4】:

          检查您的磁盘容量。我在做 Raspberry Pi 项目时遇到过这种情况。我不得不处理大文件下载,这导致 RPi 的 SD 卡很快被填满。达到一定程度后 FTP 上传 0 字节文件。 不仅对于小型存储,这可以在任何地方发生。例如,您的服务器可以创建千兆字节的错误日志文件。一段时间后,您的服务器空间将被这些日志文件填满。同样的事情发生在 FTP 上传上。也检查一下。干杯!

          【讨论】:

            【解决方案5】:

            尝试运行 WireShark,看看发生了什么?这可能会为您提供有关问题所在的线索。

            http://www.wireshark.org/

            【讨论】:

              猜你喜欢
              • 2012-12-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-10-03
              • 2011-02-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多