说明
如果你是在利用java的FTPClient上传文件到linux服务器,出现各种问题导致文件上传失败,请你耐心的看完本篇文章,可能对你排查问题有帮助,本文总结了上传文件到FTP文件可能会遇到的各种坑。
如果遇到和我一样的问题,看完文章没解决的可以留言,解决了也说说明一下自己的原因方便别人排查该类问题,谢谢!!!
背景
楼主最近在和别人搞项目,负责的是将上传的图片资源利用FTPClient上传到Nginx服务器的指定位置,刚开始,根据教程在centos上下载FTP,配置完用户后,能正常上传文件到linux上的各个位置。但是,问题出现了,在没有修改centos和本地java代码的情况下,第二天居然上传不了文件了。
首先先贴上网上的FTPClient工具类代码
public class FTPUtils {
//ftp服务器地址
private String hostname;
//ftp服务器端口号默认为21
private Integer port;
//ftp登录账号
private String username;
//ftp登录密码
private String password;
private FTPClient ftpClient = null;
/**
* 初始化ftp服务器
*/
private void initFtpClient() {
ftpClient = new FTPClient();
ftpClient.setControlEncoding("utf-8");
try {
ftpClient.connect(hostname, port); //连接ftp服务器
ftpClient.login(username, password);//登录ftp服务器
ftpClient.getReplyCode(); //是否成功登录服务器
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 上传文件
*
* @param pathname ftp服务保存地址
* @param fileName 上传到ftp的文件名
* @param originfilename 待上传文件的名称(绝对地址) *
* @return
*/
public boolean uploadFile(String pathname, String fileName, String originfilename) {
boolean flag = false;
InputStream inputStream = null;
try {
inputStream = new FileInputStream(new File(originfilename));
initFtpClient();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
if (!existFile(pathname)) {
createDirecroty(pathname);
}
ftpClient.changeWorkingDirectory(pathname);
flag = ftpClient.storeFile(fileName, inputStream);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
ftpClient.logou