【问题标题】:Error while uploading file to file server将文件上传到文件服务器时出错
【发布时间】:2014-10-10 02:59:14
【问题描述】:

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

【问题讨论】:

    标签: java jakarta-ee file-upload ftp fileserver


    【解决方案1】:

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

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

    【讨论】:

    • 我删除并尝试了您提到的所有 3 种模式。但它不起作用。我看到的一件好事是 STREAM_TRANSFER_MODE 服务器接受模式类型。我仍然在java应用程序中得到了我上面给出的异常。对于您提到的其他 2 种模式,它在服务器日志中显示为未实现模式。
    猜你喜欢
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多