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 有两种操作模式——一种用于文本文件,另一种用于二进制(jpg、csv、pdf、zip)文件。

您的代码不起作用,因为默认传输模式FTPClientFTP.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 回答