27

私は非常に単純なファイルのアップロードを行おうとしています。指示したファイルをアップロードできるJavaFTPClientが必要です。しかし、PDFは常にすべて台無しになり、私のpdfエディター(Adobe)は、I/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();
    }

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

4

8 に答える 8

32

FTPClientのデフォルトの転送モードは。であるため、機能しませんFTP.ASCII_FILE_TYPE。バイナリモードで転送するには、構成を更新する必要があります。

于 2011-08-29T19:45:33.423 に答える
24

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

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

xlsxファイルでも同じ問題が発生しましたが、これは良い解決策でした。

于 2011-11-15T08:58:04.730 に答える
10

FTPには2つの動作モードがあることを忘れがちです。1つはテキストファイル用で、もう1つはバイナリ(画像)ファイル用です。古き良き時代には、コマンドラインftpクライアントから接続する場合、ファイルを要求する前に転送モードを設定することを注意深く覚えていました。そうしないと、まさにあなたが抱えているような問題に遭遇しました。今日、多くの状況がデフォルトでバイナリになっているように見えますが、明らかにあなたの状況ではありません。

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

于 2011-05-08T05:52:21.997 に答える
3

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

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f));
res = client.storeFile("File Name", bis);
bis.close();
client.logout();
于 2011-05-08T04:26:32.790 に答える
2

ドキュメントから

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

したがって、呼び出す前にFileInputStreamを閉じてくださいlogout()

于 2011-05-08T04:27:22.720 に答える
1

これを試して。

objFtpClient.setFileType(FTP.BINARY_FILE_TYPE);

objFtpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);

objFtpClient.enterLocalPassiveMode();
于 2013-10-14T13:43:53.827 に答える
1

私の場合、ftp.setFileType(FTP.BINARY_FILE_TYPE、FTP.BINARY_FILE_TYPE)のみが機能しましたが、ftp.setFileTransferMode(FTP.BINARY_FILE_TYPE)ファイルを使用するとファイルが破損していました。

于 2014-10-12T14:52:29.787 に答える
0

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

于 2011-07-17T01:05:48.217 に答える