FtpClient storeFile 总是返回 False

2022-09-02 12:06:25

请弄清楚这一点。代码正常运行,没有任何异常。

try
{
    FTPClient ftp = new FTPClient();
    ftp.connect(server);
    if(!ftp.login(username, password))
    {
        ftp.logout();
        return false;
    }
    int reply = ftp.getReplyCode();
    if (!FTPReply.isPositiveCompletion(reply))
    {
        ftp.disconnect();
        return false;
    }
    InputStream in = new FileInputStream(localfile);
    ftp.setFileType(ftp.BINARY_FILE_TYPE, ftp.BINARY_FILE_TYPE);
    ftp.setFileTransferMode(ftp.BINARY_FILE_TYPE);
    Store = ftp.storeFile(destinationfile, in);
    in.close();
    ftp.logout();
    ftp.disconnect();
}
catch (Exception ex)
{
    ex.printStackTrace();
    return false;
}
return Store;

但是,return 语句始终返回 false,并且文件不会上载到服务器上。有人请帮忙。

供您参考,我在办公室网络。我们需要--->添加任何代理?


File file = new File("C:\\Users\\sg0214273\\Desktop\\seagate\\seagate.txt");
FileInputStream input = new FileInputStream(file);
client.setFileType(FTP.BINARY_FILE_TYPE);
if (!client.storeFile(file.getName(), input)) {
  System.out.println("upload failed!");
} 
reply = client.getReplyCode();

if(!FTPReply.isPositiveCompletion(reply)) {
  System.out.println("upload failed!");
}
Login success...
230 User ******** logged in.
upload failed!-----> is form boolean return value of storefile 
upload failed!---------> is from replycode...
Logout from FTP server...

请帮忙。


答案 1

确切的失败消息可以通过调用FtpClient#getReplyCode()找到。从那一页(我的强调):

连接后立即是您需要检查回复代码的唯一实时时间(因为连接类型为void)。FTPClient 中所有 FTP 命令方法的约定是,它们要么返回布尔值,要么返回其他值。布尔方法在来自 FTP 服务器的成功完成答复时返回 true,在答复时返回 false,从而导致错误条件或失败。返回布尔值以外的值的方法返回包含 FTP 命令生成的更高级别数据的值,如果回复导致错误条件或失败,则返回 null。如果要访问导致成功或失败的确切FTP回复代码,则必须在成功或失败后调用getReplyCode。

要了解返回代码的含义,您可以查看维基百科:FTP服务器返回代码列表


答案 2

话题已经很老了,但也许我会帮助任何其他话题。我比较了FileZilla发送到FTP服务器的内容和我的程序。我需要用它来使它工作,没有好:)ftp.enterLocalPassiveMode()ftp.pasv()

并且对于调试比仅使用更好。getReplyString()getReplyCode()


推荐