首页 > 代码库 > 关于javaee上传ftp的某些问题

关于javaee上传ftp的某些问题

最近;项目需要上传归档文件到ftp服务器;我们的javaee项目服务器是IBM的uinx小型机;而FTP服务器是win8server版本的;

jar包用的是apache的commons-net-3.3.jar;

ftpClient.makeDirectory("路径")这个方法是建立文件夹的,在xp(ftp服务器)下可以直接填路径,会自动建立多层文件夹;而在win8server(ftp服务器)下则不能按路径一层一层的建立文件夹;所以必须一层一层建立;

如:

ftpClient.makeDirectory("/AA");

ftpClient.makeDirectory("/AA/BB");

只有AA存在才会在AA文件夹下建立BB文件夹;

还有就是中文目录,上传的文件名乱码的问题;

然后写了一个方法来转换它的编码;

/**
	 * 转码 (FTP协议里面,规定文件名编码为iso-8859-1,所以只能建转码以后的目录和文件)
	 * @param str
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	public String transcoding(String str) throws UnsupportedEncodingException {
		return new String(str.getBytes("GBK"),"iso-8859-1");
	}

还是补上一个完整的上传方法吧:

try {
    ftpClient.connect("192.168.1.126"); 
    ftpClient.login("admin", "123"); 
    String f = transcoding("/XX归档文件");
    //projectNo是一个变量方便生成不同的文件夹
    String f1 = transcoding("/XX归档文件/"+projectNo);
        if (!ftpClient.changeWorkingDirectory(f)){
       ftpClient.makeDirectory(f);
    }
    if (!ftpClient.changeWorkingDirectory(f1)){
       ftpClient.makeDirectory(f1);
    }
    ftpClient.changeWorkingDirectory(fn); 
    ftpClient.setBufferSize(1024); 
    ftpClient.setControlEncoding("GBK"); 
    //设置文件类型(二进制) 
    ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); 
    //filename是文件名,fis是输入流,这里应该是文件输入流;把你要上传的东西转成输入流的形式;
    ftpClient.storeFile(transcoding(fileName), fis);
} catch (IOException e) { 
    e.printStackTrace();
} finally {
    IOUtils.closeQuietly(fis); 
    ftpClient.disconnect(); //关闭连接
}

还要注意一点,就是文件名或者文件夹名称太长,也不能再windows上面建立文件或者文件夹,名称长度要适合对应的系统;