答案 0 :(得分:32)
登录ftp服务器后
ftp.setFileType(FTP.BINARY_FILE_TYPE);
以下一行无法解决问题:
//ftp.setFileTransferMode(org.apache.commons.net.ftp.FTP.BINARY_FILE_TYPE);
答案 1 :(得分:4)
听起来好像你的应用程序代码可能已经选择了ASCII和BINARY模式。 ASCII没有变化,BINARY执行行尾字符翻译与FTP应该如何工作完全相反。
如果不是问题,请编辑您的问题以添加代码的相关部分。
修改强>
其他几种可能(但IMO不太可能)的解释:
答案 2 :(得分:3)
我发现Apache retrieveFile(...)有时无法使用超过特定限制的文件大小。为了克服这个问题,我会使用retrieveFileStream()代替。在下载之前,我已经设置了Correct FileType并将Mode设置为PassiveMode
所以代码看起来像
....
ftpClientConnection.setFileType(FTP.BINARY_FILE_TYPE);
ftpClientConnection.enterLocalPassiveMode();
ftpClientConnection.setAutodetectUTF8(true);
//Create an InputStream to the File Data and use FileOutputStream to write it
InputStream inputStream = ftpClientConnection.retrieveFileStream(ftpFile.getName());
FileOutputStream fileOutputStream = new FileOutputStream(directoryName + "/" + ftpFile.getName());
//Using org.apache.commons.io.IOUtils
IOUtils.copy(inputStream, fileOutputStream);
fileOutputStream.flush();
IOUtils.closeQuietly(fileOutputStream);
IOUtils.closeQuietly(inputStream);
boolean commandOK = ftpClientConnection.completePendingCommand();
....