是这样的,我在docker内的tomcat项目里进行FTP报501,但是在docker外面的tomcat的程序里面不报501。一直怀疑容器限制了请求,我这边代码用的hutool工具包,源代码:
Ftp ftp = new Ftp(ip,21,userName,password);
FTPClient ftpClient = ftp.getClient();
log.info("【FTP上传】上传文件前,replyCode:"+ftpClient.getReplyCode()+",被动端口:"+ftpClient.getPassivePort());
if(ftp.upload("/",file.getOriginalFilename(),file.getInputStream())){
return "上传成功!";
}else{
log.info("【FTP上传】上传失败,replyCode:"+ftpClient.getReplyCode()+",被动端口:"+ftpClient.getPassivePort());
return "上传失败!";
}
报错截图:
后来经过多次测试发现,把模式置为被动模式即可!新代码:
hutool切换被动模式:
ftp.setMode(FtpMode.Passive);
原生切换被动模式:
ftpClient.enterLocalPassiveMode();
Ftp ftp = new Ftp(ip,21,userName,password);
ftp.setMode(FtpMode.Passive);//hutool工具包切换为被动模式
FTPClient ftpClient = ftp.getClient();
// ftpClient.enterLocalPassiveMode();//其他切换(hutool也可用)为被动模式
log.info("【FTP上传】上传文件前,replyCode:"+ftpClient.getReplyCode()+",被动端口:"+ftpClient.getPassivePort());
if(ftp.upload("/",file.getOriginalFilename(),file.getInputStream())){
return "上传成功!";
}else{
log.info("【FTP上传】上传失败,replyCode:"+ftpClient.getReplyCode()+",被动端口:"+ftpClient.getPassivePort());
return "上传失败!";
}