1.上传文件到ftp服务器,并解决上传文件名称乱码问题
public class FtpUploadUtils {
private static Logger log = Logger.getLogger(FtpUploadUtils.class);
/**
* @throws BmsException
*
* 上传附件到金融平台的ftp服务器 @param @param @return @author Bill @throws
*/
public static void uploadFiles(String url, int port, String loginName, String password, List<BmAttatchmentModel> fileList,
String uploadPath) throws BmsException {
// 创建客户端对象
FTPClient ftp = new FTPClient();
InputStream local = null;
try {
// 连接ftp服务器
ftp.connect(url, port);
// 登录
if (ftp.login(loginName, password)) {
log.info("登录ftp服务器成功");
} else {
log.error("登录ftp服务器失败");
throw new BmsException("登录ftp服务器失败");
}
// 设置上传路径
String path = uploadPath;
// 检查上传路径是否存在 如果不存在返回false
ftp.setControlEncoding("UTF-8"); // 中文支持
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
ftp.enterLocalPassiveMode();
boolean flag = ftp.changeWorkingDirectory(new String(path.getBytes("UTF-8"), "8859_1"));
if (!flag) {
// 创建上传的路径 该方法只能创建一级目录,在这里如果/home/ftpuser存在则可创建image
ftp.makeDirectory(new String(path.getBytes("UTF-8"), "8859_1"));
}
// 指定上传路径
ftp.changeWorkingDirectory(path);
// 指定上传文件的类型 二进制文件
ftp.setFileType(FTP.BINARY_FILE_TYPE);
// 读取本地文件
if (fileList.size() > 0) {
for (BmAttatchmentModel bmAttatchmentModel : fileList) {
File file = new File(bmAttatchmentModel.getFilePath());
if(!file.exists()){
continue;
}
local = new FileInputStream(file);
// 第一个参数是文件名
ftp.storeFile(new String(bmAttatchmentModel.getFileName().getBytes("UTF-8"), "8859_1"), local);
file.delete();
}
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 关闭文件流
local.close();
// 退出
ftp.logout();
// 断开连接
ftp.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}