2. 7-15.新的向ftp上传文件的方法,没有写中间临时文件的


/**
* Description: 向FTP服务器上传文件
* @param ftpPath FTP服务器文件存放路径
* @param multipartFile 上传到FTP服务器上的文件
* @return 成功返回文件名,比如 uuid.jpg,失败返回null
*/
public String uploadFileToFtpService(String ftpPath, MultipartFile multipartFile) {

//截取文件格式后缀
String fileSuffix = multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf(".") + 1);
//uuid.格式 是文件名
String fileName = UUID.randomUUID() + "."+fileSuffix;

FTPClient ftpClient=null;
try {
//连接ftp
ftpClient = getFTPConnection();
if(ftpClient==null){
logger.error("ftp服务器连接失败");
return null;
}

/*该部分为逐级创建,并切换到工作目录*/
String[] split = ftpPath.split("/");
for (String str : split) {
if(StringUtils.isBlank(str)) {
continue;
}
if (!ftpClient.changeWorkingDirectory(str)) {//注意这步必须加上进入目录,否则当目录不存在时候只创建目录不进入则文件写入有问题
//防止中文编码导致目录找不到
String directory = new String(str.getBytes("UTF-8"),"iso-8859-1");
//目录不存在则创建目录
ftpClient.makeDirectory(directory);
//更换目录到当前目录,否则目录不存在时只是创建目录而不能写入文件到该目录
ftpClient.changeWorkingDirectory(directory);
}
}



ftpClient.enterLocalPassiveMode();//工作模式被动
InputStream input = multipartFile.getInputStream();
//文件写入 远程文件名;输入流
boolean storeFile = ftpClient.storeFile(fileName, input);
if (!storeFile) {
return null;
}
input.close();
ftpClient.logout();
} catch (IOException e) {
logger.error(e.getMessage());
return null;
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (IOException ioe) {
}
}
}
return fileName;
}


/**
* 连接FTP服务器
* @return
*/
private FTPClient getFTPConnection(){
try {
//创建ftp客户端
FTPClient ftpClient = new FTPClient();

//FTP服务器端口,默认21,使用默认端口可以不写
ftpClient.connect(ftpHost,Integer.parseInt(ftpPort));// 连接FTP服务器

// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
ftpClient.login(ftpUsername, ftpPassword);// 登录

if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
logger.info("登录成功");
ftpClient.setControlEncoding(LOCAL_CHARSET);
ftpClient.enterLocalPassiveMode();//设置被动模式
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//设置传输模式,一定要设置二进制传输格式

return ftpClient;
}else{
//登录失败返回Null
ftpClient.disconnect();
return null;
}
} catch (IOException e) {
return null;
}


}

posted @   江南小镇的一缕阳光  阅读(127)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示