网上看了一些ftp上传代码,感觉还是有点杂,就自己结合后简化了一下,可以根据自己需要扩展。
以下来自不同两个实例:
application.properties 里写ftp地址
ftp.ip=xx.xx.x.xxx
ftp.port=21
ftp.username=hks
ftp.password=123456
ftp.path=/
再写个对象映射属性,get.set就不放了
@ConfigurationProperties(prefix = "ftp")
**public** **class**FtpProperty {
**private** String ip;
**private** **int** port;
**private** String username;
**private** String password;
**private** String path;
}
上传文件:
@Autowired
FtpProperty ftpProperty;
**public** **void** exportToFtp(){
//创建客户端对象
FTPClientftp = **new** FTPClient();
InputStreamlocal=**null**;
String ip=ftpProperty.getIp();
**int** port=ftpProperty.getPort();
String username=ftpProperty.getUsername();
String password=ftpProperty.getPassword();
String path=ftpProperty.getPath();
**try** {
//连接ftp服务器
ftp.connect(ip, port);
//登录
ftp.login(username, password);
//设置上传路径
//path="/";
//检查上传路径是否存在 如果不存在返回false
**boolean** flag = ftp.changeWorkingDirectory(path);
**if**(!flag){
//创建上传的路径 该方法只能创建一级目录
ftp.makeDirectory(path);
}
//指定上传路径
ftp.changeWorkingDirectory(path);
//指定上传文件的类型 二进制文件
ftp.setFileType(FTP.***BINARY_FILE_TYPE***);
//读取本地文件(路径)
Filefile = **new** File("./data.json");
local = **new** FileInputStream(file);
//第一个参数是文件名
ftp.storeFile(file.getName(), local);
}**catch** (SocketException e) {
e.printStackTrace();
}**catch** (IOException e) {
e.printStackTrace();
}**finally** {
**try** {
//关闭文件流
local.close();
//退出
ftp.logout();
//断开连接
ftp.disconnect();
}**catch** (IOException e) {
e.printStackTrace();
}
}
}
下载:
以下载图片为例
/*
* 从FTP服务器下载图片
*
* @param ftpHost FTP IP地址
*
* @param ftpUserName FTP 用户名
*
* @param ftpPassword FTP用户名密码
*
* @param ftpPort FTP端口
*
* @param ftpPath FTP服务器中文件所在路径 格式: ftptest/aa
*
* @param fileName 文件名称
*/
public static void downloadFtpPicture(HttpServletResponse response,String ftpHost, String ftpUserName,
String ftpPassword, int ftpPort, String ftpPath,String name) {
FTPClient ftpClient = null;
OutputStream os = null;
String fileName =name;
try {
ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
ftpClient.setControlEncoding("GBK"); // 中文支持
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.setRemoteVerificationEnabled(false);
ftpClient.enterLocalPassiveMode();
ftpClient.enterLocalPassiveMode();
ftpClient.changeWorkingDirectory(ftpPath);
os = response.getOutputStream();
fileName = new String(fileName.getBytes("GBK"),"ISO-8859-1"); //需要与FTP服务器编码格式ISO-8859-1一致才能被识别
ftpClient.retrieveFile(fileName, os);
os.close();
ftpClient.logout();
logger.info("下载成功。");
} catch (FileNotFoundException e) {
logger.error("没有找到" + ftpPath + "文件");
e.printStackTrace();
} catch (SocketException e) {
logger.error("连接FTP失败.");
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
logger.error("文件读取错误。");
e.printStackTrace();
}finally {
try {
ftpClient.disconnect();
} catch (IOException io) {
io.printStackTrace();
}
}
}