运行将文件上载到文件服务器的代码时出错。我正在使用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
传输模式应为以下之一:STREAM_TRANSFER_MODE
(默认),BLOCK_TRANSFER_MODE
或COMPRESSED_TRANSFER_MODE
。
删除clientFtp.setFileTransferMode(FTP.BINARY_FILE_TYPE)
它应该工作。