关于使用FTPClient创建文件夹并上传文件遇到的问题

       需求:使用FTPClient,根据上传文件和需要存放的文件目录,若FTP服务端不存在指定的文件目录,则创建;否则直接将文件保存至对应的文件目录中。

       测试:感觉问题不大,直接写代码,做测试用例。用JAVA第三方的FTPClient作为工具,主要代码如下:

public boolean FtpUpload(String fileName, String file, String fileDir) {
	FTPClient ftp = new FTPClient();
        // 创建FTP连接,登录,根据返回码,测试连接是否成功,此处省略.......

        // 主要是下面代码:
        if(fileDir != null) {
                ftp.makeDirectory(fileDir);// 创建文件目录
		ftp.changeWorkingDirectory(fileDir);// 切换至文件目录准备上传
         }

          // 下面省略一万字........
}
因为本机为windows开发环境,顺便正好有ftp服务端,测试:
FtpUpload("test.txt", "E:\\test.txt", "/DirA/DirB");

       一切顺利,如愿在FTP目录/DirA/DirB不存在的情况下,创建目录并将test.txt写入DirB目录下。

       接下来更换Linux下发布的FTP服务,再用测试用例测试,发现创建目录返回false,无法创建目录,也无法切换至指定目录?难道是linux权限问题?

       经过测试,在排除了权限问题等,查看API,通过调用FTPClient.printWorkingDirectory()函数,发现使用windows发布的FTP服务,打印的路径为“/”,而用linux发布的FTP服务,打印的路径为“/home/ftp/”,为FTP的全路径。

       在这个情况下,使用相对路径去创建FTP目录,如下:

FtpUpload("test.txt", "E:\\test.txt", "DirA");

       顺利创建文件目录,并将文件写入DirA目录下。

       最后在调试过程中,还是无法通过指定"/DirA/DirB"方式,批量创建文件目录,但通过间接的方法可以搞定。

      所谓间接方式,就是类似这样:

//将文件目录按路径分隔符读取,然后分别创建
String[] ftppaths = ftppath.split("/");
for(int i=0; i<ftppaths.length; i++) {
	ftp.makeDirectory(ftppaths[i]);
	ftp.changeWorkingDirectory(ftppaths[i]);
}

猜你喜欢

转载自airball.iteye.com/blog/2212138