1. ホーム
  2. java

[解決済み] FtpClient storeFileは常にFalseを返します。

2022-02-08 05:27:41

質問

これを解明してください。コードは例外なく正しく実行されます。

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...

よろしくお願いします。

解決方法は?

正確な失敗メッセージは、次のように呼び出すことで確認できます。 FtpClient#getReplyCode() . そのページより(私が強調)。

接続直後は、実際に確認する必要がある唯一のタイミングです。 というのは、connect は void 型だからです。に対する規約は FTPClient のすべての FTP コマンドメソッドは、以下のいずれかです。 はブール値または他の値を返します。ブール値のメソッドは FTPサーバーから正常終了の返信があった場合はtrueを、FTPサーバーから正常終了の返信があった場合はfalseを返します。 は、エラー状態または失敗をもたらす応答を返します。メソッド boolean以外の値を返す場合は、その値を含む値を返します。 FTPコマンドで生成された上位データ、または返信があった場合はNULLを使用します。 の結果、エラー状態または失敗となった。 にアクセスしたい場合は 成功または失敗の原因となった正確なFTPリプライコードを知るには 成功または失敗の後に getReplyCode を取得します。

リターンコードの意味を知るには ウィキペディア FTPサーバーのリターンコード一覧 .