docker部署应用无法通过FTP上传文件
程序员文章站
2022-07-14 12:14:52
...
最近在项目中使用了FTP这个协议去做了文件传输的功能,在本地测试也是通过的,完全没有问题。但是昨天用去用docker部署的时候发生了奇怪的现象,当请求过去的时候,ftp服务器能够连接,文件夹也能够创建,但是就是上传怎么也上传不上去,也没有抛异常。一时间很疑惑。
去查看了很多博客,都说的是要启动被动模式。
@Bean
@Scope("prototype")
public FTPClient getFTPClient(){
FTPClient ftpClient = new FTPClient();
ftpClient.setConnectTimeout(1000*5);
try {
ftpClient.connect(url,port);
ftpClient.login(username,password);
ftpClient.setControlEncoding("utf-8");
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);//设置文件传输模式为二进制,可以保证传输的内容不会被改变
//设置被动模式
ftpClient.enterLocalPassiveMode();
int replyCode = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(replyCode)){
log.warn("连接ftp服务器失败!ftp服务器地址:" + url
+ ", 端口:" + port + ", 初始化工作目录:" + remotedir);
ftpClient.disconnect();
}
} catch (IOException e) {
log.error("连接ftp服务器发生异常!ftp服务器地址:" + url
+ ", 端口:" + port + ", 初始化工作目录:" + remotedir + "\n异常信息: " + e.getMessage());
}
return ftpClient;
最后在添加了被动模式后,重新打包,docker重新部署上传文件成功了。
强调两个点,一个是docker部署必须开被动模式。第二个是开被动模式必须在连接登录后才能开启,在连接登录之前开启是不起作用的。我一开始就是将被动模式的开启放在了前面,结果上传失败。放在了连接登录后正常运行
上一篇: 猫狗队列问题