1

我正在使用它来上传一些文件。如果我在本地连接中它可以工作,但如果我使用外部连接,我会收到以下消息:425 Can't open data connection.来自 ftp 服务器。

我使用 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.";
}

调试显示没有异常。

4

1 回答 1

1

来自网络:

首先 - 最常见的解决方案:更改主动/被动模式设置。但这可能行不通,如果它成功了,它只是掩盖真正问题的创可贴。

正如我过去提到的,发生此错误的最常见原因之一是 FTP 服务器软件本身的错误配置,与 SSL 连接和防火墙有关,其中连接试图在虚假 IP 地址上建立自己。在此处阅读有关通过 NAT 防火墙的 FTP SSL 的更多信息,其中包括一些潜在的解决方案。

还有其他不太可能的原因,例如:

  • 服务器配置为始终使用相同的端口进行被动模式连接,或者客户端配置为始终使用相同的端口进行主动模式连接,尽管在这种情况下通常有问题的软件应该首先引发不同的错误,但我见过这种情况。
  • 在被动模式下,FTP 服务器前面的防火墙没有打开正确的端口。所以服务器告诉客户端连接到端口 x 上的 ipaddress 1.2.3.4,但防火墙不允许端口 x 上的传入连接。大多数防火墙都足够聪明,可以在看到 PASV 响应时打开端口。对于主动模式和 FTP 客户端前面的防火墙,反之亦然。

来自我:我在 andoird 上使用过这个库并且效果很好,所以请参阅我的复制/粘贴部分。

于 2013-06-27T19:48:42.690 回答