尝试上传文件时 FTPClient 连接超时
FTPClient connection timeout while trying to upload file
我正在使用 org.apache.commons.net.ftp.FTPClient
将文件上传到 Windows FTP 服务器。
我在将文件上传到 FTP 服务器时遇到问题(还有没有内容的文件)。我得到 Connection timed out (Connection timed out)
.
奇怪的是我可以创建文件夹。
我的代码如下所示:
public FtpClient getFtpClient() throws ConnectException {
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect("localhost", 21);
ftpClient.enterLocalPassiveMode();
ftpClient.login("username", "password");
final int loginResponse = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(loginResponse)) {
ftpClient.disconnect();
}
ftpClient.setFileType(BINARY_FILE_TYPE);
ftpClient.setRemoteVerificationEnabled(false);
} catch (final IOException e) {}
return ftpClient;
}
private void connectAndSend(String message) throws FileTransferException {
try ((final FTPClient ftpClient = getFtpClient())) {
// code to create dir if they do not exist goes here
final ByteArrayInputStream inputStream = new ByteArrayInputStream(message.getBytes());
ftpClient.storeFile("c:\upload\folderA\subfolderB\2019-10-14-20.11.54.111.fileName.dat", inputStream);
} catch (IOException e) {}
}
为什么我能够创建文件夹,但当我尝试上传文件时,我得到 Connection timed out (Connection timed out)
。
我试过有和没有 ftpClient.enterLocalPassiveMode();
但没有运气。
我也曾尝试使用与 java 程序在同一台机器上的 FTP 客户端将文件放入 FTP 服务器,但运气不佳。
我能够使用 FileZilla(位于另一台机器上)将相同的文件上传到 FTP 服务器。
Java 程序位于 EC2 实例中的 docker 映像 运行 中。 FileZilla 在 Windows 机器上 运行。
更新:
这是 java 程序试图将文件放入 FTP 服务器的日志。
2019-10-15 13:19:57.017 INFO 1 --- [ask-scheduler-3] u.c.h.g.a.service.ftp.FtpSender : File built for dest D:\FTP\FolderOne\FolderTwo\FolderThree
PASV
530 Please login with USER and PASS.
USER *******
331 Password required
PASS *******
230 User logged in.
2019-10-15 13:19:57.048 INFO 1 --- [ask-scheduler-3] u.c.h.g.a.service.ftp.FtpClient : Logged into FTP Server
TYPE I
200 Type set to I.
CWD D:\
550 The parameter is incorrect.
2019-10-15 13:19:57.050 INFO 1 --- [ask-scheduler-3] u.c.h.g.a.service.ftp.FtpSender : Folder D:\ does not exist. Creating folder D:\
MKD D:\
550 The parameter is incorrect.
CWD FTP
250 CWD command successful.
2019-10-15 13:19:57.052 INFO 1 --- [ask-scheduler-3] u.c.h.g.a.service.ftp.FtpSender : Folder FTP exist. Do nothing
CWD FolderOne
250 CWD command successful.
2019-10-15 13:19:57.053 INFO 1 --- [ask-scheduler-3] u.c.h.g.a.service.ftp.FtpSender : Folder FolderOne exist. Do nothing
CWD FolderTwo
250 CWD command successful.
2019-10-15 13:19:57.054 INFO 1 --- [ask-scheduler-3] u.c.h.g.a.service.ftp.FtpSender : Folder FolderTwo exist. Do nothing
CWD FolderThree
250 CWD command successful.
2019-10-15 13:19:57.055 INFO 1 --- [ask-scheduler-3] u.c.h.g.a.service.ftp.FtpSender : Folder FolderThree exist. Do nothing
2019-10-15 13:19:57.058 INFO 1 --- [ask-scheduler-3] u.c.h.g.a.service.ftp.FtpSender : uploading to pre.env.co.uk:21 D:\FTP\FolderOne\FolderTwo\FolderThree19-10-15-14.19.57.169751.fileName.dat as username
PASV
227 Entering Passive Mode (10,128,5,21,213,99).
2019-10-15 13:22:07.746 ERROR 1 --- [ask-scheduler-3] u.c.h.g.a.service.ftp.FtpSender : FAILED uploading to pre.env.co.uk:21
||AI021|20191014|181439|8160394620251766|||81|4074|DATA|ADAT|||DATA|1111111|111111|11111111111|||11|1111|DATA|ADAT|.|DATA||||DATA|94|816035||||802||15|004|||||N|N|DATA||||||||||||||||||704721919||||DATA|0|||DATA|||||||||DATA||||DATA|11|11111||||111||111|1111|||||1|1|1111||||||||||||||||||704721919||||DATA|0|||DATA||||||||
as username.
{}
java.net.ConnectException: Connection timed out (Connection timed out)
这是来自 FTP 客户端 运行 的日志,与 Java 程序
在同一台机器上
root@955a11ba6126:/usr/src/ftp# ftp -d -p dmx01.pre.examplecloud.co.uk
Connected to dmx01.pre.examplecloud.co.uk.
220 Microsoft FTP Service
ftp: setsockopt: Bad file descriptor
Name (dmx01.pre.examplecloud.co.uk:root): dmx01-ftp
---> USER dmx01-ftp
331 Password required
Password:
---> PASS XXXX
230 User logged in.
---> SYST
215 Windows_NT
Remote system type is Windows_NT.
ftp> cd FTP
---> CWD FTP
250 CWD command successful.
ftp> put cat
local: cat remote: cat
ftp: setsockopt (ignored): Permission denied
---> PASV
227 Entering Passive Mode (10,128,5,21,219,253).
ftp: connect: Connection timed out
ftp> put cat
local: cat remote: cat
ftp: setsockopt (ignored): Permission denied
---> PASV
421 Service not available, remote server has closed connection
Passive mode refused.
ftp>
为什么java程序和FTP客户端无法将文件放入FTP服务器。 java 程序和 FTP 客户端 运行 在同一台机器上。
FTPClient.storeFile
的第一个参数是:
remote
- The name to give the remote file.
我认为 "c:\upload\folderA\subfolderB\2019-10-14-20.11.54.111.fileName.dat"
不是您的 FTP 服务器的有效远程路径。使用您使用 FTP 客户端登录时看到的路径。
我正在使用 org.apache.commons.net.ftp.FTPClient
将文件上传到 Windows FTP 服务器。
我在将文件上传到 FTP 服务器时遇到问题(还有没有内容的文件)。我得到 Connection timed out (Connection timed out)
.
奇怪的是我可以创建文件夹。
我的代码如下所示:
public FtpClient getFtpClient() throws ConnectException {
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect("localhost", 21);
ftpClient.enterLocalPassiveMode();
ftpClient.login("username", "password");
final int loginResponse = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(loginResponse)) {
ftpClient.disconnect();
}
ftpClient.setFileType(BINARY_FILE_TYPE);
ftpClient.setRemoteVerificationEnabled(false);
} catch (final IOException e) {}
return ftpClient;
}
private void connectAndSend(String message) throws FileTransferException {
try ((final FTPClient ftpClient = getFtpClient())) {
// code to create dir if they do not exist goes here
final ByteArrayInputStream inputStream = new ByteArrayInputStream(message.getBytes());
ftpClient.storeFile("c:\upload\folderA\subfolderB\2019-10-14-20.11.54.111.fileName.dat", inputStream);
} catch (IOException e) {}
}
为什么我能够创建文件夹,但当我尝试上传文件时,我得到 Connection timed out (Connection timed out)
。
我试过有和没有 ftpClient.enterLocalPassiveMode();
但没有运气。
我也曾尝试使用与 java 程序在同一台机器上的 FTP 客户端将文件放入 FTP 服务器,但运气不佳。
我能够使用 FileZilla(位于另一台机器上)将相同的文件上传到 FTP 服务器。
Java 程序位于 EC2 实例中的 docker 映像 运行 中。 FileZilla 在 Windows 机器上 运行。
更新:
这是 java 程序试图将文件放入 FTP 服务器的日志。
2019-10-15 13:19:57.017 INFO 1 --- [ask-scheduler-3] u.c.h.g.a.service.ftp.FtpSender : File built for dest D:\FTP\FolderOne\FolderTwo\FolderThree
PASV
530 Please login with USER and PASS.
USER *******
331 Password required
PASS *******
230 User logged in.
2019-10-15 13:19:57.048 INFO 1 --- [ask-scheduler-3] u.c.h.g.a.service.ftp.FtpClient : Logged into FTP Server
TYPE I
200 Type set to I.
CWD D:\
550 The parameter is incorrect.
2019-10-15 13:19:57.050 INFO 1 --- [ask-scheduler-3] u.c.h.g.a.service.ftp.FtpSender : Folder D:\ does not exist. Creating folder D:\
MKD D:\
550 The parameter is incorrect.
CWD FTP
250 CWD command successful.
2019-10-15 13:19:57.052 INFO 1 --- [ask-scheduler-3] u.c.h.g.a.service.ftp.FtpSender : Folder FTP exist. Do nothing
CWD FolderOne
250 CWD command successful.
2019-10-15 13:19:57.053 INFO 1 --- [ask-scheduler-3] u.c.h.g.a.service.ftp.FtpSender : Folder FolderOne exist. Do nothing
CWD FolderTwo
250 CWD command successful.
2019-10-15 13:19:57.054 INFO 1 --- [ask-scheduler-3] u.c.h.g.a.service.ftp.FtpSender : Folder FolderTwo exist. Do nothing
CWD FolderThree
250 CWD command successful.
2019-10-15 13:19:57.055 INFO 1 --- [ask-scheduler-3] u.c.h.g.a.service.ftp.FtpSender : Folder FolderThree exist. Do nothing
2019-10-15 13:19:57.058 INFO 1 --- [ask-scheduler-3] u.c.h.g.a.service.ftp.FtpSender : uploading to pre.env.co.uk:21 D:\FTP\FolderOne\FolderTwo\FolderThree19-10-15-14.19.57.169751.fileName.dat as username
PASV
227 Entering Passive Mode (10,128,5,21,213,99).
2019-10-15 13:22:07.746 ERROR 1 --- [ask-scheduler-3] u.c.h.g.a.service.ftp.FtpSender : FAILED uploading to pre.env.co.uk:21
||AI021|20191014|181439|8160394620251766|||81|4074|DATA|ADAT|||DATA|1111111|111111|11111111111|||11|1111|DATA|ADAT|.|DATA||||DATA|94|816035||||802||15|004|||||N|N|DATA||||||||||||||||||704721919||||DATA|0|||DATA|||||||||DATA||||DATA|11|11111||||111||111|1111|||||1|1|1111||||||||||||||||||704721919||||DATA|0|||DATA||||||||
as username.
{}
java.net.ConnectException: Connection timed out (Connection timed out)
这是来自 FTP 客户端 运行 的日志,与 Java 程序
在同一台机器上root@955a11ba6126:/usr/src/ftp# ftp -d -p dmx01.pre.examplecloud.co.uk
Connected to dmx01.pre.examplecloud.co.uk.
220 Microsoft FTP Service
ftp: setsockopt: Bad file descriptor
Name (dmx01.pre.examplecloud.co.uk:root): dmx01-ftp
---> USER dmx01-ftp
331 Password required
Password:
---> PASS XXXX
230 User logged in.
---> SYST
215 Windows_NT
Remote system type is Windows_NT.
ftp> cd FTP
---> CWD FTP
250 CWD command successful.
ftp> put cat
local: cat remote: cat
ftp: setsockopt (ignored): Permission denied
---> PASV
227 Entering Passive Mode (10,128,5,21,219,253).
ftp: connect: Connection timed out
ftp> put cat
local: cat remote: cat
ftp: setsockopt (ignored): Permission denied
---> PASV
421 Service not available, remote server has closed connection
Passive mode refused.
ftp>
为什么java程序和FTP客户端无法将文件放入FTP服务器。 java 程序和 FTP 客户端 运行 在同一台机器上。
FTPClient.storeFile
的第一个参数是:
remote
- The name to give the remote file.
我认为 "c:\upload\folderA\subfolderB\2019-10-14-20.11.54.111.fileName.dat"
不是您的 FTP 服务器的有效远程路径。使用您使用 FTP 客户端登录时看到的路径。