如何使用java从FTPS服务器获取文件?

时间:2015-04-06 16:59:39

标签: java ftp ftps ftp-server

我正在尝试访问我在ftps服务器中创建的路径中的文件夹,但它没有返回任何内容,它正在连接但不返回任何内容,如果我将服务器配置更改为ftp就可以了。我正在使用FileZilla Server,其配置在上面。

SSL / TLS

标记为true启用FTP over SSL / TLS支持(FTPS)并允许在SSL / TLS设置下通过TLS显式FTP

我的用户配置是:

Flat“强制SSL用于用户登录”在FireZilla Server的用户配置常规中为真。

服务器关于连接的日志正在收到消息,我不知道它是否有帮助:

227进入被动模式

LIST

521需要PROT P

PASV

227进入被动模式

NLST

521需要PROT P

退出

我要连接的示例类是上面的每个权限:

公共类FTPClientExample2 {

public static void main(String[] args)
{
    String server = "myip";
    int port = 2121;
    String user = "joao";
    String pass = "1234";

    boolean error = false;
    FTPSClient ftp = null;
    try
    {
        ftp = new FTPSClient("SSL");
        ftp.setAuthValue("SSL");
        ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));

        int reply;

        ftp.connect(server, port);
        System.out.println("Connected to ftp.wpmikz.com.cn");
        System.out.print(ftp.getReplyString());

        // After connection attempt, you should check the reply code to verify
        // success.
        reply = ftp.getReplyCode();

        if (!FTPReply.isPositiveCompletion(reply))
        {
            ftp.disconnect();
            System.err.println("FTP server refused connection.");
            System.exit(1);
        }
        ftp.login(user, pass);
        // ... // transfer files
        ftp.setBufferSize(1000);
        ftp.enterLocalPassiveMode();
        // ftp.setControlEncoding("GB2312");
        ftp.changeWorkingDirectory("/");
        ftp.changeWorkingDirectory("/ae"); //path where my files are
        ftp.setFileType(FTP.BINARY_FILE_TYPE);
        System.out.println("Remote system is " + ftp.getSystemName());

        String[] tmp = ftp.listNames();  //returns null
        System.out.println(tmp.length);
    }
    catch (IOException ex)
    {
        System.out.println("Oops! Something wrong happened");
        ex.printStackTrace();
    }
    finally
    {
        // logs out and disconnects from server
        try
        {
            if (ftp.isConnected())
            {
                ftp.logout();
                ftp.disconnect();
            }
        }
        catch (IOException ex)
        {
            ex.printStackTrace();
        }
    }
}

}

知道出了什么问题吗?

谢谢大家!

1 个答案:

答案 0 :(得分:5)

尝试在登录后执行此操作

  ftp.execPBSZ(0);
  ftp.execPROT("P");