【发布时间】:2018-04-25 07:33:15
【问题描述】:
当尝试使用 java 程序上传文件到 FTP 时:
public void upload(String localFile,String remoteFile) throws Exception{
ftp = new FTPClient();
ftp.setControlKeepAliveTimeout(300);
ftp.connect(host,21);
ftp.enterLocalPassiveMode();
ftp.setUseEPSVwithIPv4(false);
ftp.login(user,password);
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
FileInputStream in = null;
in = new FileInputStream(localFile);
ftp.storeFile(remoteFile,in);
in.close();
ftp.disconnect();
}
我明白了:
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:381)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:243)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:230)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:377)
at java.net.Socket.connect(Socket.java:539)
at org.apache.commons.net.SocketClient._connect(SocketClient.java:243)
at org.apache.commons.net.SocketClient.connect(SocketClient.java:202)
当我尝试使用命令行(从 linux)上传相同的文件时,我只能在使用 EPSV 时这样做:
llnx:~ ftp anonymous@9.20.1.116
Connected to 9.20.1.116.
220 Microsoft FTP Service
331 Anonymous access allowed, send identity (e-mail name) as password.
Password:
230 User logged in.
Remote system type is Windows_NT.
ftp> epsv
EPSV/EPRT on IPv4 off.
ftp> put /tmp/file1.xml /dir_1/file1.xml
local: /tmp/file1.xml remote: /dir_1/file1.xml
227 Entering Passive Mode (10,40,1,149,233,168).
125 Data connection already open; Transfer starting.
100% |*************************************| 117 KB 28.66 MB/s --:-- ETA
226 Transfer complete.
120032 bytes sent in 00:00 (7.96 MB/s)
那么,为什么我的 java 代码连接被拒绝?
也许我没有正确使用 enterLocalPassiveMode() 或 setUseEPSVwithIPv4() 方法?
***我认为答案是如何从Java程序运行EPSV命令。
谢谢大家。 艾森。
【问题讨论】:
-
我猜异常是在
ftp.connect(host,21);行中抛出的,因此主机名/ip 或端口可能存在问题,也可能是某些东西阻塞了连接。你是在控制台的同一台机器上执行java程序吗? -
是的。同一台机器。
-
host是 FTP 服务器的主机名还是 IP 地址? -
host参数是FTP服务器的IP地址
标签: java file-upload ftp