Apache Commons FTP problems
Solution 1
Change the following:
boolean xxx=client.setFileTransferMode(FTPClient.BINARY_FILE_TYPE);
Should be:
boolean xxx=client.setFileType(FTP.BINARY_FILE_TYPE);
You have confused FileTransferModes with FileTypes.
The available FileTypes are:
The available FileTransferModes are:
I suppose if apache introduced enums for these constant types, then this kind of problem could be avoided, but then the library would not be available to pre-java-5 runtimes.
I wonder how much of an issue java 1.4 compatibility really is.
Solution 2
If only the text file was transferred successfully, I suspect you need to set the binary transfer file type.
See the setFileType method to see how to do this.
The commons-net wiki mentions this is the cause of most file corruption issues.
Related videos on Youtube
Igor
Updated on July 11, 2022Comments
-
Igor almost 2 years
I want to implement a FTP Client with Apache Commons Net only for uploading data. The Connection and Login to FTP-Server works fine. But the upload does not work right. The files are a little to big as the originals. And the files are damaged. I tried an image, a video and a textfile. Only the textfile is alright.
Now I see while debugging
boolean tmp=client.setFileTransferMode(FTPClient.BINARY_FILE_TYPE);
gives me
false
. So it can not be set. Why? (Maybe this is not the problem?)Here a the rest of my code
client=new FTPClient(); try { int reply; client.connect(url, port); reply = client.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { client.disconnect(); System.err.println("FTP server refused connection."); System.exit(1); } client.login(user, pw); boolean xxx=client.setFileTransferMode(FTPClient.BINARY_FILE_TYPE); client.setControlKeepAliveTimeout(300); client.enterLocalPassiveMode(); if (client.isConnected()) { try { File file=new File(<FILE>); FileInputStream inputStream = new FileInputStream(file); OutputStream outputStream = client.storeFileStream(file.getName()); byte[] buffer = new byte[4096]; int l; while((l = inputStream.read(buffer))!=-1) { outputStream.write(buffer, 0, l); } inputStream.close(); outputStream.flush(); outputStream.close();}
-
Igor almost 13 yearsHi, I tried it, but the method gives me false, so the Mode can not be set.
-
MacAnthony almost 13 yearsYou tried this some where after the connect method was called?
-
MacAnthony almost 13 yearsAnd also after the login method.
-
Jesse Webb almost 13 yearsHe tried the
setFileTransferMode
, not thesetFileType
method you suggested. This is a correct answer.