package com.company.project.utils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Map;
/**
* ftp 上传文件
* FTPClient commons.net 3.0.1版本
* 上传文件至指定ftp路径
* @author Lenovo
* oracle每天更新工参三次。抽取一次。上传至ftp目录
*/
public class FtpClientUpFile {
private static final String hostname = "10.*.*.4";//FTP IP
private static final int port = 21;//FTP 端口号
private static final String username = "ftpuser";//FTP 登录账号
private static final String password = "123456"; //FTP 登录密码
private static final String pathname = "/data/ftp/";//FTP 工作路径
private static final SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd"); //FTP服务器上文件
/**
* 上传文件(可供Action/Controller层使用)
*
* @param fileName 上传到FTP服务器后的文件名称
* @param inputStream 输入文件流
* @return
*/
public static boolean uploadFile(String fileName, FileInputStream inputStream) {
boolean flag = false;
FTPClient ftpClient = new FTPClient();
//设置超时
ftpClient.setConnectTimeout(60 * 60 * 1000);
//设置编码
ftpClient.setControlEncoding("UTF-8");
try {
//连接FTP服务器
ftpClient.connect(hostname, port);
//登录FTP服务器
ftpClient.login(username, password);
//是否成功登录FTP服务器
int replyCode = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(replyCode)) {
return flag;
}
System.out.println("===========登录FTP成功了==========");
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//切换路径 创建路径
ftpClient.makeDirectory(pathname);
ftpClient.changeWorkingDirectory(pathname);
ftpClient.enterLocalPassiveMode();
String pathDir1 = pathname+df.format(new Date());
boolean pathIsExis = ftpClient.changeWorkingDirectory(pathDir1);
System.out.println("查看文件夹是否存在");
if(!pathIsExis){//不存在文件夹则创建并且进入文件夹
ftpClient.makeDirectory(pathDir1);
ftpClient.changeWorkingDirectory(pathDir1);
}
//设置缓冲
ftpClient.setBufferSize(1024 * 1024 * 20);
//保持连接
ftpClient.setKeepAlive(true);
boolean a = ftpClient.storeFile(new String(fileName.getBytes("utf-8"), "iso-8859-1"), inputStream);
if (a) {
flag = true;
System.out.println("===========创建文件成功==============" + a);
String fileName2 = fileName; //这里可以将名字更改
boolean status = ftpClient.rename(fileName, fileName2);
if (status)
System.out.println("===========修改文件名称成功==============" + status);
}else{
flag = false;
}
inputStream.close();
ftpClient.logout();
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return flag;
}
public static void main(String[] args) {
String fileName = "tousu.xlsx.gz";
String originfilename = "E:\\data\\"+fileName;
FileInputStream inputStream;
try {
inputStream = new FileInputStream(originfilename);
boolean a = uploadFile(fileName, inputStream);
System.out.println("上传文件结果============" + a);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
/**
* 测试上传
*
* @param map 从数据库获取到的文件信息 (包含文件路径FILE_PATH 文件类型FILE_TYPE等信息)
*/
public void testUpdFtpFile(Map<String, Object> map) {
/*上传附件到FTP*/
FileInputStream inputStream = null;
try {
//找到要上传的文件
String originfilename = "E:\\work\\files\\" + map.get("FILE_PATH").toString();
//转成流
inputStream = new FileInputStream(originfilename);
//上传后的文件名+文件类型
String ftpName = "上传到FTP后的文件名." + map.get("FILE_TYPE");
boolean updFtpFile = FtpClientUpFile.uploadFile(ftpName, inputStream);
if (updFtpFile) {
//打印下日志
System.out.println(("=======文件已上传到FTP========"));
}
} catch (Exception e) {
System.out.println("上传异常");
e.printStackTrace();
}
}
}
java上传文件至ftp
最新推荐文章于 2023-09-08 15:16:37 发布