在我们的一个项目中,我们使用Apache的FTP客户端API。 我必须将xml文件上传到FTP服务器,进程将继续轮询该服务器目录。因此,使用上传API,我上传了扩展名为.TRANSFER的xml文件,成功上传完整文件后,该文件将重命名为.xml文件。
我面临的奇怪问题是,有时文件的文件大小为0字节。但同一文件有时会完全上传。当我查看日志文件时,传输的字节仅为0 kb。所以我不确定会出现什么问题。
我正在使用linux服务器和Apache公共的FTP客户端API。
任何调试提示和技巧都会有所帮助。
此致 SRINIVAS
答案 0 :(得分:4)
我也曾经遇到过这个问题。
我注意到如果文件大于某个大小(对我来说是174字节左右),它确实被正确传输了。较小的文件最终被创建为零字节文件。
我认为这是Apache commons ftp代码中的一个错误。我通过获取源代码修复了它并快速修复了我生成的罐子为我们工作。
如果我还记得修复权限,我在公共ftp代码中用于传输的套接字上禁用了Nagle的算法和socket.setTcpNoDelay(false)。
答案 1 :(得分:1)
如果有时发生,它的一端会闻起来像防火墙配置。难以诊断,但启动(如果可以)尝试在主动/被动之间切换。
点击此处查看更好的参考资料:http://slacksite.com/other/ftp.html
答案 2 :(得分:1)
另一种可能的防火墙配置问题:如果你是在配置了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
答案 3 :(得分:1)
检查您的磁盘容量。当我在Raspberry Pi项目上工作时,我遇到了这种情况。我不得不处理大文件下载,这导致很快填满RPi的SD卡。达到某种程度后FTP上传0字节文件。 不仅适用于小型存储,也可以在任何地方进行。例如,您的服务器可以创建千兆字节的错误日志文件。一段时间后,这些日志文件将填充您的服务器空间。同样的事情发生在FTP上传。检查一下。干杯!
答案 4 :(得分:0)
尝试运行WireShark并查看线路上的内容?这可能会为您提供问题所在的线索。