运行将文件上传到文件服务器的代码时出现错误。我正在使用 Apache Commons Net File 客户端来传输文件。我想上传一个图像文件。由于它不起作用,我尝试使用文本文件,但仍然收到相同的错误。
在我的代码下面找到:
FTPClient clientFtp = new FTPClient();
clientFtp.setFileType(FTP.BINARY_FILE_TYPE);
clientFtp.setFileTransferMode(FTP.BINARY_FILE_TYPE);
clientFtp.setSoTimeout(10000);
clientFtp.enterLocalPassiveMode();
result = clientFtp.storeFile("test", fs);
我得到的错误是:
Exception in thread "main" java.lang.NoSuchFieldError: _socketFactory_
at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:513)
at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:388)
at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:1388)
at sampe.test.files.Test.main(Test.java:95)
我检查了文件服务器日志以获取更多信息,然后发现:
(000028)8/16/2014 17:14:20 PM - root (127.0.0.1)> MODE N
(000028)8/16/2014 17:14:20 PM - root (127.0.0.1)> 504 Unknown MODE type
(000028)8/16/2014 17:14:20 PM - root (127.0.0.1)> PASV
(000028)8/16/2014 17:14:20 PM - root (127.0.0.1)> 227 Entering Passive Mode (127,0,0,1,199,159)
(000028)8/16/2014 17:14:20 PM - root (127.0.0.1)> disconnected.
因此,根据文件服务器日志,我觉得错误在以下行:
clientFtp.setFileTransferMode(FTP.BINARY_FILE_TYPE);
这段代码有什么问题吗?我将此文件类型更改为不同的文件类型,但仍然没有正确采用此文件类型。这也可能不是 Java 代码的问题。也许文件服务器或Windows对此有影响?
当我将模式更改为:
clientFtp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
日志是:
(000030)8/16/2014 18:04:00 PM - root (127.0.0.1)> TYPE I
(000030)8/16/2014 18:04:00 PM - root (127.0.0.1)> 200 Type set to I
(000030)8/16/2014 18:04:00 PM - root (127.0.0.1)> MODE S
(000030)8/16/2014 18:04:00 PM - root (127.0.0.1)> 200 MODE set to S.
(000030)8/16/2014 18:04:00 PM - root (127.0.0.1)> PASV
(000030)8/16/2014 18:04:00 PM - root (127.0.0.1)> 227 Entering Passive Mode (127,0,0,1,202,181)
(000030)8/16/2014 18:04:01 PM - root (127.0.0.1)> disconnected.
对于其他 2 我得到的日志为:
(000032)8/16/2014 18:05:31 PM - root (127.0.0.1)> 502 Unimplemented MODE type