困扰了2天的问题终于解决
错误代码
/**
* @Description: 从ftp服务器下载文件到指定输出流
* @param remotePath,fileName,outputStream FTP服务器上的相对路径,文件名,输出流
* @return 布尔值 成功返回true,异常返回false
* @author Beyond
* @date 2021/6/5 14:34
*/
public static boolean downloadFile(String remotePath, String fileName, OutputStream outputStream) {
boolean result = false;
try {
if (initFtpClient()){
return false;
}
// 转移到FTP服务器目录
ftp.changeWorkingDirectory(remotePath);
// 通知服务器开通给一个端口,防止挂死
ftp.enterLocalPassiveMode();
// 取得指定文件夹下文件列表
FTPFile[] fs = ftp.listFiles();
for (FTPFile ff : fs) {
// 取得指定文件并下载
if (ff.getName().equals(fileName)) {
ftp.enterLocalPassiveMode();
ftp.retrieveFile(remotePath+"/"+fileName,outputStream);
result = true;
}
}
ftp.logout();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
return result;
}
错误原因
修正后代码
/**
* @Description: 从ftp服务器下载文件到指定输出流
* @param remotePath,fileName,outputStream FTP服务器上的相对路径,文件名,输出流
* @return 布尔值 成功返回true,异常返回false
* @author Beyond
* @date 2021/6/5 14:34
*/
public static boolean downloadFile(String remotePath, String fileName, OutputStream outputStream) {
boolean result = false;
try {
if (initFtpClient()){
return false;
}
// 转移到FTP服务器目录
ftp.changeWorkingDirectory(remotePath);
// 通知服务器开通给一个端口,防止挂死
ftp.enterLocalPassiveMode();
// 取得指定文件夹下文件列表
FTPFile[] fs = ftp.listFiles();
for (FTPFile ff : fs) {
// 取得指定文件并下载
if (ff.getName().equals(fileName)) {
ftp.enterLocalPassiveMode();
ftp.retrieveFile(
new String(fileName.getBytes(StandardCharsets.UTF_8),StandardCharsets.ISO_8859_1),
outputStream);
result = true;
}
}
ftp.logout();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
return result;
}
附图显示成功后结果