springboot FTP

1、FtpUtil工具类

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class FtpUtil {
    static String ip = "127.0.0.1";
    static String userName = "admin";
    static String passWord = "zyf";
    static FTPClient ftpClient = new FTPClient();

    /**
     * file是本地file,imgPaths是2021/09/29/xxx.jpg格式
     */
    public static boolean uploadToFtp(File file, String imgPaths) {
        try {
            //连接ftp服务器 参数填服务器的ip
            ftpClient.connect(ip);

            //进行登录 参数分别为账号 密码
            ftpClient.login(userName, passWord);

            //多层文件夹不存在时新建相应的文件夹
            if (!ftpClient.changeWorkingDirectory(imgPaths)) {
                String tempPath = "";
                //一层一层判断路径是否存在,不存在就创建
                for (String dir : imgPaths.split("/")) {
                    if ("".equals(tempPath)) {
                        tempPath = dir;
                    } else {
                        tempPath += "/" + dir;
                    }
                    if (!ftpClient.changeWorkingDirectory(tempPath)) {
                        ftpClient.makeDirectory(tempPath);//创建一个文件夹
                    }
                }
            }
            // 改变工作目录(按自己需要是否改变)
            ftpClient.changeWorkingDirectory(imgPaths);

            //设置文件类型为二进制文件
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

            //开启被动模式(按自己如何配置的ftp服务器来决定是否开启)
//            ftpClient.enterLocalPassiveMode();

            //上传文件 参数:上传后的文件名,输入流
            FileInputStream fis = new FileInputStream(file);
            ftpClient.storeFile(file.getName(), fis);
            //关闭流
            fis.close();
//            System.out.println(imgPaths + "/" + file.getName());
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
	
	/**
     * 删除FTP服务器上面的文件,imgPath格式2021/09/29,imgName格式xxx.jpg
     */
    public static void deleteToFtp(String imgPath, String imgName) throws IOException {
        //连接ftp服务器 参数填服务器的ip
        ftpClient.connect(ip);
        //进行登录 参数分别为账号 密码
        ftpClient.login(userName, passWord);

        if (ftpClient.changeWorkingDirectory(imgPath)) {
//            System.out.println(imgPath + imgName);
            ftpClient.deleteFile(imgName);
        }
    }
}

2、TestFtpController 上传

import com.jw.bsp.utils.FtpUtil;
import com.jw.bsp.utils.JWUtil;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@RestController
public class TestFtpController {

	//上传文件到FTP服务器
    @PostMapping("ftpUpload")
    public String ftpUpload(MultipartFile file) throws IOException {
        String imgPaths = "";
        if (file != null && !file.getOriginalFilename().isEmpty()) {
            //取当前日期作为文件夹划分年/月/日文件夹
            String tempPath = System.getProperty("user.dir") + "/icon/";//上传到本地的路径
            String nowDate = JWUtil.getFilePath();//获取当前日期返回的是yyyy/MM/dd
            String uuid = JWUtil.getUUID();//去掉-的UUID
            String fileName = file.getOriginalFilename();// 文件名file.getOriginalFilename()
            String fileType = fileName.substring(fileName.lastIndexOf("."));//文件类型
            File dest = new File(tempPath + uuid + fileType);//上传到本地
            //图片临时存放地址路径。
            File parentPath = new File(tempPath);
            if (!parentPath.exists()) {
                parentPath.mkdirs();
            }
            //拼接图片路径
            imgPaths = nowDate + uuid + fileType;
            //上传到本地
            file.transferTo(dest);
            //上传至ftp服务器
            FtpUtil.uploadToFtp(dest, nowDate);
            //删除本地文件
            dest.delete();
        }
        return imgPaths;
    }

	//删除FTP服务器文件
    @PostMapping("ftpDelFile")
    public void ftpDelFile(String filePath,String fileName) throws IOException {
        FtpUtil.deleteToFtp(filePath,fileName);
    }
}

3、JWUtil工具类

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.UUID;

public class JWUtil {
    //创建一个去掉-的UUID
    public static String getUUID() {
        return UUID.randomUUID().toString().replaceAll("-", "");
    }

    //获取文件夹地址yyyy/MM/dd的形式
    public static String getFilePath() {
        //取当前日期作为文件夹划分年/月/日文件夹
        String[] nowDates = (LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))).split("-");
        return nowDates[0] + "/" + nowDates[1] + "/" + nowDates[2] + "/";
    }
}

postman测试:
上传
springboot FTP_第1张图片
删除
springboot FTP_第2张图片

你可能感兴趣的:(#,Spring,Boot,spring,boot,java)