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 = "119.23.221.103";
    static String userName = "user";
    static String passWord = "a";
    static FTPClient ftpClient = new FTPClient();

    public static boolean uploadToFtp(File file,String imgPaths){
        try {
            //连接ftp服务器 参数填服务器的ip
            ftpClient.connect(ip);

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

            //改变工作目录(按自己需要是否改变)
            // 文件夹不存在时新建
            if(!ftpClient.changeWorkingDirectory(imgPaths)){
                ftpClient.makeDirectory(imgPaths);
            }
            ftpClient.changeWorkingDirectory(imgPaths);


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

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

            //上传文件 参数:上传后的文件名,输入流
            ftpClient.storeFile(file.getName(), new FileInputStream(file));
//            System.out.println(imgPaths+"/"+file.getName());
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    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、上传(我这里是多个文件上传,单个上传自己根据代码把MultipartFile[ ]变成MultipartFile 。for去掉即可)

import com.jw.lzsp.config.CorsConfig;
import org.springframework.web.multipart.MultipartFile;

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

public class ImgUpload {
    public static String imgUpload(MultipartFile[] files){
        //取当前日期作为文件夹划分年/月/日文件夹
        String[] nowDates = (LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))).split("-");
        String nowDate = nowDates[0]+"/"+nowDates[1]+"/"+nowDates[2];
        String imgPaths = "";
        for(MultipartFile file:files){
            String uuid = UUID.randomUUID().toString().replaceAll("-","");
            String fileName = file.getOriginalFilename();  // 文件名file.getOriginalFilename()
            String fileType = fileName.substring(fileName.lastIndexOf("."));
            File dest = new File(CorsConfig.tempPath+"img/" + uuid + fileType);//先上传到本地,然后在上传到ftp
            //图片临时存放地址根路径img文件夹,即FTP服务器的根目录文件夹。
            File parentPath = new File(CorsConfig.tempPath+"img");//CorsConfig.tempPath是上传到本地的服务器的文件路径
            if (!parentPath.exists()){
                parentPath.mkdirs();
            }
            //拼接图片路径
            if(imgPaths.equals("")){
                imgPaths =nowDate+"/" +uuid + fileType;
            }else {
                imgPaths += ";"+nowDate+"/" +uuid + fileType;
            }
            try {
                //上传到本地
                file.transferTo(dest);
                //上传至ftp服务器
                FtpUtil.uploadToFtp(dest,nowDate);
                //2、删除本地文件
//                dest.delete();
            } catch (Exception e) {
                System.err.println(e);
            }
        }
        return imgPaths;
    }
}
上一篇:Spring 远程调用工具类RestTemplateUtils


下一篇:Springboot 通过Ftp协议下载文件,并在Vue平台上显示其内容