我正在使用它上传一些文件。如果我在本地连接中,它可以工作,但如果我使用外部连接,我从ftp服务器收到此消息:425 Can't open data connection.
。
我使用org.apache.commons.net.ftp.FTPClient和org.apache.commons.net.ftp.FTPFile库。
public static String gravaImagem(String photoFile) {
FTPClient mFtp = new FTPClient();
try {
mFtp.connect(FTPHOST, PORTA);
mFtp.login(USUARIO, SENHA);
mFtp.setFileTransferMode(FTPClient.BINARY_FILE_TYPE);
mFtp.setFileType(FTPClient.BINARY_FILE_TYPE);
String origem = Environment.getExternalStorageDirectory().getPath()+File.separator+"Pictures"+File.separator+"ImageSec"+File.separator+photoFile;
FileInputStream fis = new FileInputStream(origem);
mFtp.storeFile(photoFile, fis);
mFtp.logout();
mFtp.disconnect();
} catch (SocketException e) {
e.printStackTrace();
return "Fail. (ERR#CON3)";
} catch (IOException e) {
e.printStackTrace();
return "Fail. (ERR#CON4)";
}
return "Imagem enviada ao servidor.";
}
Debug没有例外。
答案 0 :(得分:1)
来自互联网:
首先 - 最常见的解决方案:更改主动/被动模式 设置。但这可能行不通,如果它只是一个创可贴 掩盖真正的问题。
正如我过去所提到的那样,最常见的原因之一 发生此错误是FTP服务器软件配置错误 本身,与SSL连接和防火墙有关,其中 连接尝试在伪造的IP地址上建立自己。阅读更多 关于通过NAT防火墙的FTP SSL,这里有一些潜在的解决方案 包括在内。
还有其他不太可能的原因,例如:
- 服务器配置为始终使用相同的端口进行被动模式连接,或者客户端配置为始终使用 用于活动模式连接的相同端口,尽管在这种情况下 通常,相关软件应该引发不同的错误 首先,但我已经看到了这种情况。
- 在被动模式下,FTP服务器前面的防火墙没有打开正确的端口。所以服务器告诉客户端 在端口x上连接到ipaddress 1.2.3.4,但防火墙没有 允许端口x上的传入连接。大多数防火墙都很智能 足以在看到PASV响应时打开端口。副 反之亦然,主动模式和FTP客户端前的防火墙。
来自我: 我已经在andoird上使用了这个库并且效果很好,所以请看我的复制/粘贴部分。