web-dev-qa-db-ja.com

FTPClient-Java、アップロードファイル

私は非常に単純なファイルのアップロードをしようとしています。 Java任意のファイルをアップロードできるFTPClient。/Oエラー。

私は次のクラスを使用しています:

    import org.Apache.commons.net.ftp.FTPClient;
    ....

    FTPClient client = new FTPClient();
    FileInputStream fis = null;

    try {
        client.connect("mydomain.com");
        client.login("user", "password");

        String filename = "myPDF.pdf";
        fis = new FileInputStream(filename);

        client.storeFile("temp.pdf", fis);
        fis.close();
        client.logout();
    } catch (IOException e) {
        e.printStackTrace();
    }

なぜこれが機能しないのですか、どうすれば修正できますか?

25
CodeGuy

FTPClient のデフォルトの転送モードはFTP.ASCII_FILE_TYPE。バイナリモードで転送するには、構成を更新するだけです。

26
An̲̳̳drew

これをファイルに追加します

ftp.setFileType(FTP.BINARY_FILE_TYPE, FTP.BINARY_FILE_TYPE);
ftp.setFileTransferMode(FTP.BINARY_FILE_TYPE);

私はxlsxファイルでも同じ問題を抱えていましたが、これは良い解決策でした。

24
Stevan Buzejic

FTPには、テキストファイル用とバイナリ(イメージ)ファイル用の2つの操作モードがあることを忘れがちです。コマンドラインftpクライアントから接続する古き良き時代では、ファイルを要求する前に転送モードを設定することを慎重に覚えていました。今日、多くの状況がデフォルトでバイナリになっているように見えますが、明らかにあなたの状況ではありません。

おそらく、バイナリ/イメージモードで転送するようにFTP実装に指示する必要があります。

9
Chris Stratton

BufferedInputStream を使用してみてください。これは(動作する)コードサンプルです。

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f));
res = client.storeFile("File Name", bis);
bis.close();
client.logout();
3
MByD

ドキュメント から

このメソッドは、指定されたInputStreamを閉じません。

したがって、logout()を呼び出す前にFileInputStreamを閉じます

2
Bala R

私にとっては、ftp.setFileType(FTP.BINARY_FILE_TYPE、FTP.BINARY_FILE_TYPE)のみが機能しましたが、ftp.setFileTransferMode(FTP.BINARY_FILE_TYPE)を使用していたときはファイルが破損していました。

1
Swarit Agarwal

これを試して。

objFtpClient.setFileType(FTP.BINARY_FILE_TYPE);

objFtpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);

objFtpClient.enterLocalPassiveMode();
1
JK Patel

これは Commons NETライブラリのバグ のように見えます。これはバージョン3.0に影響を与えました。バグを修正した新しいバージョン(3.0.1)を試してください。

0
Paŭlo Ebermann