2

我已经在一个亚马逊 EC2 实例中设置了一个 ftp 服务器,并且可以使用 apache ftp 库在我的本地机器上从该服务器下载文件。现在我试图在另一个 Amazon EC2 实例中运行相同的 ftpclient 程序,但它不工作。以下是从 ftpsever 下载文件的示例代码:

FTPClient ftp = new FTPClient();
String loc = "/home/ubuntu/test/";
String remote = "/home/ftp";
try
{
  ftp.connect("ec2-xx-xx-xx-xxx.compute-1.amazonaws.com", 21);
  ftp.login("username", "xxx");
  System.out.println("connected..");
  ftp.setFileType(FTP.BINARY_FILE_TYPE);

  OutputStream output;
  output = new FileOutputStream(loc+"file_name");
  ftp.retrieveFile(remote+"/filen_name", output);
  output.close();
  ftp.disconnect();
}
catch(Exception ex)
{
   ex.printStackTrace();
}

下面的代码可以列出远程目录的所有文件名:

for(FTPFile f: ftp.listFiles(remote))
{
  System.out.println(f.getName());

}

这两个代码在我的本地机器上都可以正常工作,但在亚马逊机器上却不行。它连接但无法列出文件名或下载文件。并且它没有显示任何错误消息。

提前致谢 -

4

1 回答 1

4

我刚刚找到了一个可能的答案,因为我已经有一段时间遇到同样的问题了。它解决了我的问题。

您必须将此行添加到您的代码中: ftp.enterLocalPassiveMode();

在 connect() 之后和 login() 之前。

这是链接: http ://bartling.blogspot.dk/2012/04/using-apache-commons-net-ftpclient-on.html

于 2012-09-14T12:07:17.793 回答