随着帝都雾霾的爆表,我的脑子也跟着混沌起来。。
前几天明明ftp下载文件的功能好好的,今天突然下载不了了。。。。
遂检查了下代码:
@Override
public boolean ftpGet(String ftpPath, String fileName, String pathDownload) {
FTPClient ftpClient = ftp.connectClient();
if(ftpClient == null) return false ;
boolean b = ftp.login(ftpClient, ftp.getUserName(), ftp.getPasswd());
if(!b) {
ftp.closeClient(ftpClient);
return false;
}
ftpClient.enterLocalPassiveMode();
String dirStr = null;
if(File.separator.equals("\\")){
dirStr = pathDownload.substring(0, pathDownload.lastIndexOf("\\"));
}else{
dirStr = pathDownload.substring(0, pathDownload.lastIndexOf("/"));
}
File file = new File(dirStr);
if(!file.exists()){
b = file.mkdirs();
LogUtil.paramAndResult("-ftp get mk dir-", pathDownload, "mk dir--"+b);
}
file = new File(pathDownload);
OutputStream out;
try {
out = new BufferedOutputStream(new FileOutputStream(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
LogUtil.paramAndResult("-ftp get outputstream-", pathDownload, "pathDownload not exists");
ftp.closeClient(ftpClient);
return false;
}
boolean success = false;
try {
success = ftpClient.retrieveFile(ftpPath+"/"+fileName, out);
} catch (IOException e) {
e.printStackTrace();
LogUtil.error(e);
LogUtil.paramAndResult("-ftp get file exception-", ftpPath+"/"+fileName, "");
}
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
ftp.closeClient(ftpClient);
LogUtil.paramAndResult("-ftp get-", ftpPath+"/"+fileName, "ftp get status-"+success);
if(!success && !file.isDirectory()){
file.delete();
}
return success;
}
奇怪,没有什么问题啊。。
于是,习惯性了看了看vsftpd的日志:
输入命令:tail -n500 /var/log/vsftpd.log
很明显日志输出下载失败了,后面几个传输的都是0字节。。。
后来又重复检查了几遍参数,表面上看没有什么问题 嘿嘿~
这到底发生了什么事情了??????
无奈之下,只好Google。。。然而这对我还是没有卵用。。。
在极度的抓狂之下,突然看到传过来的文件路劲是以/home开头的。。。。
于是乎我明白了什么。。。
原来ftp的root目录已经是/home/ftpuser/res/,而传过来的路径是文件的绝对路径。。。
罪魁祸首竟然是配置文件的ftp路径配错了。。。。
修改结束后,测试一下。OK。。。。
心情变得那么些许的美丽了,哈哈