Apache Commons FTP问题

我想用Apache Commons Net实现一个FTP客户端,仅用于上传数据。 连接和登录FTP服务器工作正常。 但上传不能正常工作。 文件与原件有点大。 文件已损坏。 我尝试了一个图像,一个video和一个文本文件。 只有文本文件没问题。

现在我看到调试时

boolean tmp=client.setFileTransferMode(FTPClient.BINARY_FILE_TYPE); 

给我false 。 所以它无法设置。 为什么? (也许这不是问题?)

这是我的其余代码

 client=new FTPClient(); try { int reply; client.connect(url, port); reply = client.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { client.disconnect(); System.err.println("FTP server refused connection."); System.exit(1); } client.login(user, pw); boolean xxx=client.setFileTransferMode(FTPClient.BINARY_FILE_TYPE); client.setControlKeepAliveTimeout(300); client.enterLocalPassiveMode(); if (client.isConnected()) { try { File file=new File(); FileInputStream inputStream = new FileInputStream(file); OutputStream outputStream = client.storeFileStream(file.getName()); byte[] buffer = new byte[4096]; int l; while((l = inputStream.read(buffer))!=-1) { outputStream.write(buffer, 0, l); } inputStream.close(); outputStream.flush(); outputStream.close();} 

更改以下内容:

 boolean xxx=client.setFileTransferMode(FTPClient.BINARY_FILE_TYPE); 

应该:

 boolean xxx=client.setFileType(FTP.BINARY_FILE_TYPE); 

您已将FileTransferModes与FileTypes混淆。

可用的FileType是:

可用的FileTransferModes是:

我想如果apache为这些常量类型引入了枚举,那么可以避免这种问题,但是这个库将无法用于pre-java-5运行时。
我想知道java 1.4兼容性究竟有多少问题。

如果仅成功传输了文本文件,我怀疑您需要设置二进制传输文件类型。

请参阅setFileType方法以了解如何执行此操作。

commons-net wiki提到这是大多数文件损坏问题的原因。