package com.bcxin.file;
import cn.hutool.core.io.FileUtil;
import com.bcxin.file.model.FtpConfig;
import javax.swing.*;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
/**
* zxf
* @author ZXF
* @create 2022/10/19 0019 13:41
* @version
* @注意事项
*/
public class FtpSwingWorker1 extends SwingWorker {
private final String filePath;
private final FtpConfig ftpConfig;
public FtpSwingWorker1(FtpConfig ftpConfig, String filePath) {
this.ftpConfig = ftpConfig;
this.filePath = filePath;
}
@Override
protected Object doInBackground() throws Exception {
try {
List fileList = getFile(new File(filePath));
if(fileList != null){
int number = 0;
double proNum = 100.0/fileList.size();
BcxinFtpClient ftpClient = new BcxinFtpClient();
try {
try{
boolean conn = ftpClient.connect(ftpConfig.getIp(), ftpConfig.getUserName(), ftpConfig.getPassword(), ftpConfig.getPort());
if(!conn){
throw new Exception("FTP连接失败");
}
}catch (Exception e){
JOptionPane.showMessageDialog(null,"FTP连接失败!");
return null;
}
for (File fileUrl : fileList) {
number++;
String asolutePath = fileUrl.getAbsolutePath();
asolutePath = asolutePath.replaceAll("\\\\", "/");
asolutePath = asolutePath.substring(asolutePath.indexOf("/uploads"));
System.out.println(asolutePath);
String file = ftpConfig.getPath() + asolutePath;
file= ftpClient.getEncodingName(file);
System.out.println(file);
boolean result = FtpUtil.bcxUploadFile(ftpClient, file, new FileInputStream(fileUrl));
if(!result){
FileUtil.writeString(fileUrl.getAbsolutePath(),new File(filePath).getParent()+"/error.log","utf-8");
}
publish(number);
setProgress((int) (number * proNum));
if(result){
System.out.println("上传成功");
}else{
System.out.println("上传失败");
}
}
}catch (Exception e){
e.printStackTrace();
}finally {
if(ftpClient != null){
try {
ftpClient.disconnect();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
System.out.println("上传完成");
}catch (Exception ex){
ex.printStackTrace();
System.out.println("上传失败");
}
return String.valueOf(100);
}
private List getFile(File dirFile){
List fileList = new ArrayList<>();
if(dirFile.isDirectory()){
File[] dirFiles = dirFile.listFiles();
if(dirFiles != null){
for (File file : dirFiles) {
if(file.isFile()){
fileList.add(file);
continue;
}
if(file.isDirectory()){
fileList.addAll(getFile(file));
}
}
}
}else{
fileList.add(dirFile);
}
return fileList;
}
}