我使用ftp4j通过小程序进行FTP连接来上传文件。 从服务器上,我已经打开端口 27 的 FTP 站点,targetURL = 本地 IP 地址为 192.168.x.xxx,并授予用户名 FTPUser、密码 xxxx 的访问权限。
FTPClient client = new FTPClient();
client.connect(targetURL, port);
client.setType(client.TYPE_BINARY);
client.login(user, password);
fis = new FileInputStream(targetFile);
client.upload(targetFile);
内网通过小程序连接并上传文件成功
但是,当我尝试使用外部网络进行测试时,已经使用 NAT 配置了路由器,将本地 IP 转换为外部 IP:175.136.xxx.xxx,端口为 47027(已经使用命令测试了 FTP 连接),我得到了此错误消息:
user: FTPUser, password: xxxx port 47027
network: Connecting http://175.136.xxx.xxx:47027/ with proxy=DIRECT
network: Connecting http://175.136.xxx.xxx:20459/ with proxy=DIRECT
it.sauronsoftware.ftp4j.FTPException [code=425, message= Can't open data connection.]
at it.sauronsoftware.ftp4j.FTPClient.upload(FTPClient.java:2658)
at it.sauronsoftware.ftp4j.FTPClient.upload(FTPClient.java:2539)
at it.sauronsoftware.ftp4j.FTPClient.upload(FTPClient.java:2410)
从错误日志来看,它尝试通过端口47027建立连接,然后更改为20459(我不知道它来自哪里)。
我可以看到该文件是在服务器 FTP 站点中创建的,但大小为 0 字节。
有人知道这种情况出了什么问题吗?
最佳答案
改用被动模式。您这边可能阻塞了端口。
关于java - FTP 上传文件错误代码=425,消息=无法打开数据连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9393241/