我将文件(.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();
}
}
答案 0 :(得分:4)
人们经常忘记FTP有两种操作模式 - 一种用于文本文件,另一种用于二进制(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()