Hmm maybe it is the bufferdStream. That's working code I'm using in a project for years now:
private FTPClient createClient() { FTPClient ftp = new FTPClient(); FTPClientConfig config = new FTPClientConfig(); config.setServerTimeZoneId("UTC"); ftp.setControlKeepAliveTimeout(1000 * 60 * 5l); ftp.setControlKeepAliveReplyTimeout(1000 * 60 * 5); ftp.setDataTimeout(1000 * 60 * 5); ftp.setRemoteVerificationEnabled(false); return ftp; } if (FetchMode.BYTE_DATA.equals(fetchMode)) { LOGGER.info("Using BINARY_FILE_TYPE."); ftp.setFileType(FTP.BINARY_FILE_TYPE); InputStream inStream = ftp.retrieveFileStream(ftpFile.getName()); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); int nRead; byte[] data = new byte[(int) (ftpFile.getSize() * 2)]; while ((nRead = inStream.read(data, 0, data.length)) != -1) { buffer.write(data, 0, nRead); } buffer.flush(); content.setByteData(buffer.toByteArray()); }