2

ファイル (.cvs、.zip、.rar、.doc、.png、.jpg...) を ftp サーバーにアップロードしています。奇妙なことに、すべてが正常に行われていますが、一部のデータが欠落しています。

なぜそれが起こるのか、そしてそれを修正する方法を知っている体はありますか?

 public static void uploadWithCommonsFTP(File fileToBeUpload) {
        FTPClient f = new FTPClient();
        try {
            f.connect(server.getServer());
            f.login(server.getUsername(), server.getPassword());
            f.changeWorkingDirectory("user");
            f.setFileType(FTP.BINARY_FILE_TYPE);
            f.setFileTransferMode(FTP.BINARY_FILE_TYPE);//this is part of Mohammad Adil's solutions
            f.enterLocalPassiveMode();
            ByteArrayInputStream in = new ByteArrayInputStream(FileUtils.readFileToByteArray(fileToBeUpload));
            boolean reply = f.storeFile(fileToBeUpload.getName(), in);
            if(!f.completePendingCommand()) {
                    f.logout();
                    f.disconnect();
                    System.err.println("File transfer failed.");
                    System.exit(1);
                }
                if(reply){
                    JOptionPane.showMessageDialog(null,"uploaded successfully.");
                }else{
                    JOptionPane.showMessageDialog(null,"Upload failed.");
                }
            }
            //Logout and disconnect from server
            in.close();//this is part of Mohammad Adil's solutions
            f.logout();
            f.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
}
4

1 に答える 1

4

FTPには2つの動作モードがあることを忘れがちです。1つはテキストファイル用で、もう1つはbinary(jpg、csv、pdf、zip)ファイル用です。

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

これをコードに追加します:

f.setFileTransferMode(FTP.BINARY_FILE_TYPE);

その行を後に置くだけでf.setFileType(FTP.BINARY_FILE_TYPE); 、それが機能するはずです。

編集:

あなたはあなたのコードを閉じていませんinputStream、ただ電話in.close()する前に電話してくださいlogout()

于 2012-06-27T12:46:29.553 に答える