//package com.ruoyi.common.utils.file;
//
//import org.apache.commons.net.ftp.FTP;
//import org.apache.commons.net.ftp.FTPReply;
//import org.apache.commons.net.ftp.FTPSClient;
//
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.FileOutputStream;
//import java.io.IOException;
//
//public class FTPSUploader {
//
//    private FTPSClient ftpsClient;
//
//    public FTPSUploader() {
//        // 使用TLS协议创建FTPS客户端
//        this.ftpsClient = new FTPSClient("TLS", true);
//    }
//
//    /**
//     * 连接到FTPS服务器（密码认证）
//     *
//     * @param host     服务器地址
//     * @param port     服务器端口
//     * @param username 用户名
//     * @param password 密码
//     * @throws IOException 如果连接失败
//     */
//    public void connect(String host, int port, String username, String password) throws IOException {
//        // 设置连接超时（30秒）
//        ftpsClient.setConnectTimeout(30000);
//
//        // 连接到服务器
//        ftpsClient.connect(host, port);
//
//        // 检查连接是否成功
//        int replyCode = ftpsClient.getReplyCode();
//        if (!FTPReply.isPositiveCompletion(replyCode)) {
//            disconnect();
//            throw new IOException("FTPS服务器拒绝连接，回复码: " + replyCode);
//        }
//
//        // 登录
//        if (!ftpsClient.login(username, password)) {
//            disconnect();
//            throw new IOException("FTPS登录失败，请检查用户名和密码");
//        }
//
//        // 设置为被动模式（大多数现代服务器需要）
//        ftpsClient.enterLocalPassiveMode();
//
//        // 设置保护模式
//        ftpsClient.execPBSZ(0);  // 设置保护缓冲区大小
//        ftpsClient.execPROT("P"); // 设置数据通道保护为私有
//
//        // 设置文件传输类型为二进制
//        ftpsClient.setFileType(FTP.BINARY_FILE_TYPE);
//
//        // 设置控制连接保活（5分钟）
//        ftpsClient.setControlKeepAliveTimeout(300);
//    }
//
//    /**
//     * 上传文件到FTPS服务器
//     *
//     * @param localFilePath  本地文件路径
//     * @param remoteFilePath 远程文件路径
//     * @return true如果上传成功
//     * @throws IOException 如果上传过程中出错
//     */
//    public boolean uploadFile(String localFilePath, String remoteFilePath) throws IOException {
//        File localFile = new File(localFilePath);
//        if (!localFile.exists()) {
//            throw new IOException("本地文件不存在: " + localFilePath);
//        }
//
//        try (FileInputStream inputStream = new FileInputStream(localFile)) {
//            // 创建远程目录（如果需要）
//            createDirectories(remoteFilePath.substring(0, remoteFilePath.lastIndexOf('/')));
//
//            // 上传文件
//            return ftpsClient.storeFile(remoteFilePath, inputStream);
//        }
//    }
//
//    /**
//     * 下载文件从FTPS服务器
//     *
//     * @param remoteFilePath 远程文件路径
//     * @param localFilePath  本地文件路径
//     * @return true如果下载成功
//     * @throws IOException 如果下载过程中出错
//     */
//    public boolean downloadFile(String remoteFilePath, String localFilePath) throws IOException {
//        File localFile = new File(localFilePath);
//        try (FileOutputStream outputStream = new FileOutputStream(localFile)) {
//            return ftpsClient.retrieveFile(remoteFilePath, outputStream);
//        }
//    }
//
//    /**
//     * 创建目录（包括父目录）
//     *
//     * @param path 目录路径
//     * @throws IOException 如果创建失败
//     */
//    private void createDirectories(String path) throws IOException {
//        String[] directories = path.split("/");
//        StringBuilder dirPath = new StringBuilder();
//
//        for (String dir : directories) {
//            if (!dir.isEmpty()) {
//                dirPath.append("/").append(dir);
//                if (!ftpsClient.changeWorkingDirectory(dirPath.toString())) {
//                    if (!ftpsClient.makeDirectory(dirPath.toString())) {
//                        throw new IOException("无法创建目录: " + dirPath);
//                    }
//                }
//            }
//        }
//    }
//
//    /**
//     * 断开与FTPS服务器的连接
//     */
//    public void disconnect() {
//        try {
//            if (ftpsClient.isConnected()) {
//                ftpsClient.logout();
//                ftpsClient.disconnect();
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    public static void main(String[] args) {
//        FTPSUploader uploader = new FTPSUploader();
//
//        try {
//            // 连接FTPS服务器
//            uploader.connect("8.130.100.72", 21, "root", "zhidian");
//
//            // 上传文件示例
//            boolean uploadSuccess = uploader.uploadFile(
//                    "C:\\FedoraMediaWriter.log",
//                    "root/FedoraMediaWriter.log");
//
//            if (uploadSuccess) {
//                System.out.println("文件上传成功");
//            } else {
//                System.out.println("文件上传失败");
//            }
//
//            // 下载文件示例
//            /*
//            boolean downloadSuccess = uploader.downloadFile(
//                "remote/path/file.txt",
//                "local/path/downloaded_file.txt");
//
//            if (downloadSuccess) {
//                System.out.println("文件下载成功");
//            } else {
//                System.out.println("文件下载失败");
//            }
//            */
//        } catch (IOException e) {
//            e.printStackTrace();
//        } finally {
//            uploader.disconnect();
//        }
//    }
//}
