首先引入ftp所需要的jar包commons-net-3.6.jar
获取FTPClient客户端然后连接登录
public boolean connectServer() {
try {
FTPClient ftpClient = new FTPClient() ;
ftpClient.connect(ftpIp, NumberUtils.toInt(ftpPort));
ftpClient.setControlEncoding("GBK");
int reply = ftpClient.getReplyCode();
if (FTPReply.isPositiveCompletion(reply)) {
if (ftpClient.login(ftpUser, ftPassd)) {
logger.info("【ftp服务器连接成功!】");
ftpClient.changeWorkingDirectory(dataPath); //dataPath文件存放路径
logger.info("【切换到目录】:{}",dataPath);
return true;
}
}
} catch (Exception e) {
}
return false;
}
上传
public String uploadFile(MultipartFile file) {
try {
//先调用登录
if(this.connectServer()){
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
String fileName = file.getOriginalFilename();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String str = sdf.format(new Date());
//生成新的文件名字
fileName = str + fileName.substring(fileName.lastIndexOf("."), fileName.length());
FileInputStream input=(FileInputStream) file.getInputStream();
boolean flag= ftpClient.storeFile(fileName,input);
if(flag){
logger.info("文件上传成功!!!"+fileName);
}else{
logger.error("文件上传失败!"+fileName);
input.close();
return null;
}
input.close();
return fileName;
}
} catch (IOException e) {
e.printStackTrace();
logger.error("ftp上传异常:{}", e);
}
return null;
}
下载
public boolean downloadFtpFile(HttpServletResponse resp,String fileName) {
try {
if(connectServer()){
//fileName是文件的路径地址
String path=fileName.replaceAll("\\\\", "/");
String path1=dataPath+path;
logger.info("【第二次切换到目录】:{}",path1);
ftpClient.changeWorkingDirectory(path);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
boolean flag=ftpClient.retrieveFile(path1, resp.getOutputStream());
if(flag){
logger.info("【ftp录音文件播放成功!】{}",path);
}else{
logger.info("【ftp录音文件播放失败!】{}",path);
ftpClient.logout();
return false;
}
ftpClient.logout();
return true;
}
} catch (FileNotFoundException e) {
logger.error("没有找到" + dataPath + "文件");
e.printStackTrace();
} catch (SocketException e) {
logger.error("连接FTP失败.");
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
logger.error("文件读取错误。");
}
return false;
}