关于使用FTPClient创建文件夹并上传文件遇到的问题
程序员文章站
2024-01-22 16:33:52
...
需求:使用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]); }
上一篇: 关于使用FTPClient创建文件夹并上传文件遇到的问题
下一篇: JQuery 数组