SpringBoot上传文件到FTP服务器,完整工程分享

SpringBoot上传文件到FTP服务器

昨天公司遇到一个上传图片到ftp服务器的问题,其实也不麻烦,于是自己就想练下手

首先创建一个基本的SpringBoot工程

pom.xml文件如下

<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>net.028888.springcloud</groupId>
        <artifactId>mainpom</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <groupId>net.028888.springcloudupload</groupId>
    <artifactId>springCloudUpload</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springCloudUpload</name>
    <url>https://www.bugkong.com</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.6</version>
        </dependency>
       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

主要是引入了commons-net包

然后创建工程的目录结构如下:

2018-04-27 07-03-48 的屏幕截图.png

然后,我直接上代码吧,时间来不及了,一会上班要迟到了。。。。

1,主程序Upload.java

@Controller
@ComponentScan("org.springCloudUpload")
@EnableAutoConfiguration
public class Upload {
    
    @Autowired
    private UploadService uploadService;
    
   @RequestMapping("/upload")
   @ResponseBody
   String upload(String path) {
       uploadService.upLoadImg(path);
      return "index";
    }
    
    public static void main(String[] args) {
        SpringApplication.run(Upload.class, args);
    }
}

2,service实现层(借口层就不写了)

@Service
public class UpLoadServiceImpl implements UploadService{

    // ftp服务器ip地址
    @Value("${ftpAddress}")
    private String ftpAddress;
    // 端口号
    @Value("${ftpPort}")
    private int ftpPort;
    // 用户名
    @Value("${ftpName}")
    private String ftpName;
    // 密码
    @Value("${ftpPassWord}")
    private String ftpPassWord;
    // 图片路径
    @Value("${ftpBasePath}")
    private String ftpBasePath;
    
    @Override
    public void upLoadImg(String path) {
        // TODO Auto-generated method stub
        InputStream inputStream = null;
        try {
            inputStream = new FileInputStream(path);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Boolean flag = FtpUtil.uploadFile(path, inputStream,ftpAddress,ftpPort,ftpName,ftpPassWord,ftpBasePath);
        if (flag == true) {
            System.out.println("ftp上传成功!");
        }        
    }

}

3,工具类FtpUtil

public class FtpUtil {
    // ftp服务器ip地址
    private static String FTP_ADDRESS;
    // 端口号
    private static int FTP_PORT;
    // 用户名
    private static String FTP_USERNAME;
    // 密码
    private static String FTP_PASSWORD;
    // 图片路径
    private static String FTP_BASEPATH;

    private static boolean uploadFile(String originFileName, InputStream input) {
        System.out.println(FTP_ADDRESS);
        boolean success = false;
        FTPClient ftp = new FTPClient();
        ftp.setControlEncoding("UTF-8");
        try {
            int reply;
            ftp.connect(FTP_ADDRESS, FTP_PORT);// 连接FTP服务器
            ftp.login(FTP_USERNAME, FTP_PASSWORD);// 登录
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return success;
            }
            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftp.makeDirectory(FTP_BASEPATH);
            ftp.changeWorkingDirectory(FTP_BASEPATH);
            ftp.storeFile(originFileName, input);
            input.close();
            ftp.logout();
            success = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return success;
    }

    public static Boolean uploadFile(String path, InputStream inputStream, String ftpAddress, int ftpPort,
            String ftpName, String ftpPassWord, String ftpBasePath) {
        FTP_ADDRESS = ftpAddress;
        FTP_PORT = ftpPort;
        FTP_USERNAME = ftpName;
        FTP_PASSWORD = ftpPassWord;
        FTP_BASEPATH = ftpBasePath;
        uploadFile(path,inputStream);
        return true;
    }
}

4,application.properties文件,主要就是定义ftp参数

#配置ftp信息
ftpAddress=
ftpPort=
ftpName=
ftpBasePath=
ftpPassWord=

注意,地址,请直接写ip或域名,不要协议(http或ftp)


好了最后测试一下

http://localhost:8080/upload?path=/mydoc/3.txt


爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img