package com.whyc.service;
|
|
import com.whyc.dto.FTPClientUtil;
|
import com.whyc.dto.FileDirPath;
|
import com.whyc.dto.ZipUtils;
|
import com.whyc.util.ActionUtil;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.net.ftp.FTPClient;
|
import org.apache.commons.net.ftp.FTPFile;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Service;
|
|
import java.io.File;
|
import java.io.FileOutputStream;
|
import java.io.IOException;
|
import java.util.Arrays;
|
import java.util.Date;
|
import java.util.List;
|
|
@ConditionalOnProperty(prefix = "configFile",name = "type",havingValue = "2")
|
@Service
|
@EnableScheduling // 2.开启定时任务
|
@Slf4j
|
public class FtpService2 {
|
//定时上传指定目录下文件,每周五凌晨开启备份
|
@Scheduled(cron = "59 59 23 ? * FRI")
|
public void sendFtpFile() throws IOException {
|
//先连接ftp服务器
|
FTPClient client = FTPClientUtil.connect();
|
String fileDirName = FileDirPath.getFileDirName();
|
String rootDoc=fileDirName+File.separator+"doc_file";
|
String timeStr= ActionUtil.sdfwithFTP.format(new Date());
|
client.makeDirectory(timeStr);
|
client.disconnect();
|
//备份过程是否出现过问题,标识符
|
boolean isError=false;
|
try {
|
|
File docFile = new File(rootDoc);
|
File[] fileList = docFile.listFiles();
|
//File[] fileList2 = new File[fileList.length];
|
//BeanUtils.copyProperties(fileList2,fileList);
|
for (File file:fileList) {
|
//压缩传输
|
File fileZip = new File(file.getAbsolutePath() + ".zip");
|
ZipUtils.toZip(file.getAbsolutePath(),new FileOutputStream(fileZip),true);
|
//System.out.println(fileZip.toString()+"压缩完毕");
|
//System.out.println("进行FTP传输中...");
|
try {
|
//ZipUtils.toZip(file.getAbsolutePath(),new FileOutputStream(fileZip),true);
|
String pathName=timeStr+"/"+file.getName()+".zip";
|
//System.out.println("传输目标路径确认为:"+pathName);
|
FTPClientUtil.transferFile(fileZip, pathName);
|
//System.out.println(fileZip+"传输完毕");
|
fileZip.delete();
|
//System.out.println(fileZip+"传输中转压缩包删除完毕");
|
} catch (Exception e) {
|
isError = true;
|
log.error("---------------文件"+ file.getName() +" FTP 传输异常2:"+e.toString()+"------------------");
|
fileZip.delete();
|
}
|
}
|
//System.out.println("传输完毕");
|
|
//获取备份目录,保留4次.
|
//如果过程出现错误,则不删除
|
if (!isError) {
|
FTPClient client2 = FTPClientUtil.connect();
|
String[] dirList = client2.listNames();
|
List<String> dirList2 = Arrays.asList(dirList);
|
|
for (int i = 0; i < dirList2.size()-4; i++) {
|
String dirToBeDelete = dirList2.get(i);
|
if(!client2.removeDirectory(dirToBeDelete)){
|
// 删除失败,可以尝试递归删除目录内的所有内容
|
FTPFile[] subFiles = client2.listFiles(dirToBeDelete);
|
if (subFiles != null && subFiles.length > 0) {
|
for (FTPFile subFile : subFiles) {
|
if (!subFile.isDirectory()) {
|
// 删除文件
|
client2.deleteFile(dirToBeDelete + "/" + subFile.getName());
|
}
|
}
|
// 再次尝试删除目录
|
client2.removeDirectory(dirToBeDelete);
|
}
|
}
|
}
|
client2.disconnect();
|
}
|
} catch (Exception e) {
|
log.error("备份失败:"+e.toString());
|
}
|
}
|
}
|