package com.bcxin.file;
import cn.hutool.core.io.FileUtil;
import com.bcxin.file.model.FtpConfig;
import org.apache.commons.net.ftp.FTPReply;
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 FtpSwingWorker extends SwingWorker {
private final JButton jButton;
private final String filePath;
private final FtpConfig ftpConfig;
public FtpSwingWorker(JButton jButton, FtpConfig ftpConfig, String filePath) {
this.jButton = jButton;
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) {
jButton.setText("开始上传");
jButton.setEnabled(true);
JOptionPane.showMessageDialog(null, "FTP连接失败!");
return null;
}
jButton.setText("正在上传");
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();
}
}
}
}
setProgress(100);
jButton.setText("上传完成");
JOptionPane.showMessageDialog(null, "上传完成");
} catch (Exception ex) {
jButton.setEnabled(true);
jButton.setText("上传失败");
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "上传失败");
} finally {
jButton.setEnabled(true);
}
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;
}
}