0

运行将文件上传到文件服务器的代码时出现错误。我正在使用 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
4

1 回答 1

0

传输模式应为以下之一:(STREAM_TRANSFER_MODE默认)BLOCK_TRANSFER_MODECOMPRESSED_TRANSFER_MODE.

删除clientFtp.setFileTransferMode(FTP.BINARY_FILE_TYPE)它应该可以工作。

于 2014-08-16T17:53:19.607 回答