zoukankan      html  css  js  c++  java
  • SpringBoot内嵌ftp服务

    引入依赖

    <!-- https://mvnrepository.com/artifact/org.apache.ftpserver/ftpserver-core -->
            <dependency>
                <groupId>org.apache.ftpserver</groupId>
                <artifactId>ftpserver-core</artifactId>
                <version>1.1.1</version>
            </dependency>

    UploadListener.java

    import org.apache.ftpserver.ftplet.*;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.io.File;
    import java.io.IOException;
    
    public class UploadListener extends DefaultFtplet {
    
        public static final Logger log= LoggerFactory.getLogger(UploadListener.class);
    
        /**
         *
         *  开始上传
         * Override this method to intercept uploads
         * @param session The current {@link FtpSession}
         * @param request The current {@link FtpRequest}
         * @return The action for the container to take
         * @throws FtpException
         * @throws IOException
         */
        @Override
        public FtpletResult onUploadStart(FtpSession session, FtpRequest request)
                throws FtpException, IOException {
            //获取上传文件的上传路径
            String path = session.getUser().getHomeDirectory();
            //自动创建上传路径
            File file=new File(path);
            if (!file.exists()){
                file.mkdirs();
            }
            //获取上传用户
            String name = session.getUser().getName();
            //获取上传文件名
            String filename = request.getArgument();
    
            log.info("用户:'{}',上传文件到目录:'{}',文件名称为:'{}',状态:开始上传~", name, path, filename);
            return super.onUploadEnd(session, request);
        }
    
        /**
         *  上传完成
         * Override this method to handle uploads after completion
         * @param session The current {@link FtpSession}
         * @param request The current {@link FtpRequest}
         * @return The action for the container to take
         * @throws FtpException
         * @throws IOException
         */
        @Override
        public FtpletResult onUploadEnd(FtpSession session, FtpRequest request)
                throws FtpException, IOException {
            //获取上传文件的上传路径
            String path = session.getUser().getHomeDirectory();
            //获取上传用户
            String name = session.getUser().getName();
            //获取上传文件名
            String filename = request.getArgument();
    
            File file=new File(path+"/"+filename);
            if (file.exists()){
                System.out.println(file);
            }
    
            log.info("用户:'{}',上传文件到目录:'{}',文件名称为:'{},状态:成功!'", name, path, filename);
            return super.onUploadStart(session, request);
        }
    
        @Override
        public FtpletResult onDownloadStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
            //todo servies...
            return super.onDownloadStart(session, request);
        }
        @Override
        public FtpletResult onDownloadEnd(FtpSession session, FtpRequest request) throws FtpException, IOException {
            //todo servies...
            return super.onDownloadEnd(session, request);
        }
    }

    FtpConfig.java

    import org.apache.ftpserver.DataConnectionConfigurationFactory;
    import org.apache.ftpserver.FtpServer;
    import org.apache.ftpserver.FtpServerFactory;
    import org.apache.ftpserver.ftplet.Ftplet;
    import org.apache.ftpserver.listener.ListenerFactory;
    import org.apache.ftpserver.usermanager.ClearTextPasswordEncryptor;
    import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.cache.annotation.CachingConfigurerSupport;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.ClassPathResource;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 配置类
     */
    @Configuration
    public class FtpConfig extends CachingConfigurerSupport {
    
    
        @Value("${ftp.port}")
        private Integer ftpPort;
    
    
        @Value("${ftp.passivePorts}")
        private String ftpPassivePorts;
    
        @Value("${ftp.passiveExternalAddress}")
        private String ftpPassiveExternalAddress;
    
    
    
    
        @Bean
        public FtpServer createFtpServer(){
            FtpServerFactory serverFactory = new FtpServerFactory();
    
            ListenerFactory factory = new ListenerFactory();/**
             * 被动模式
             */
            DataConnectionConfigurationFactory dataConnectionConfigurationFactory=new DataConnectionConfigurationFactory();
            dataConnectionConfigurationFactory.setIdleTime(60);
            dataConnectionConfigurationFactory.setActiveLocalPort(ftpPort);
            dataConnectionConfigurationFactory.setPassiveIpCheck(true);
            dataConnectionConfigurationFactory.setPassivePorts(ftpPassivePorts);
            dataConnectionConfigurationFactory.setPassiveExternalAddress(ftpPassiveExternalAddress);
            factory.setDataConnectionConfiguration(dataConnectionConfigurationFactory.createDataConnectionConfiguration());
            // replace the default listener
            serverFactory.addListener("default", factory.createListener());
    
            PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
            try
            {
                ClassPathResource classPathResource = new ClassPathResource("users.properties");
                userManagerFactory.setUrl(classPathResource.getURL());
            }
            catch (Exception e){
                throw new RuntimeException("配置文件users.properties不存在");
            }
    
            userManagerFactory.setPasswordEncryptor(new ClearTextPasswordEncryptor());
            serverFactory.setUserManager(userManagerFactory.createUserManager());
    
            Map<String, Ftplet> m = new HashMap<String, Ftplet>();
            m.put("miaFtplet", new UploadListener());
    
            serverFactory.setFtplets(m);
            // start the server
            FtpServer server = serverFactory.createServer();
    
    
    
            return server;
        }
    }

    InitFtpServer.java

    import org.apache.ftpserver.FtpServer;
    import org.apache.ftpserver.ftplet.FtpException;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.stereotype.Component;
    
    /**
     * springboot启动时初始化ftpserver
     */
    @Component
    public class InitFtpServer implements CommandLineRunner {
    
        public static final Logger log = LoggerFactory.getLogger(FtpServer.class);
    
    
        @Autowired
        private FtpServer server;
    
    
        @Override
        public void run(String... args) throws Exception {
            try {
                server.start();
                log.info(">>>>>>>ftp start success ");
            } catch (FtpException e) {
                e.printStackTrace();
                log.error(">>>>>>>ftp start error {}", e);
    
            }
        }
    }

    在resource下创建users.properties

    # Licensed to the Apache Software Foundation (ASF) under one
    # or more contributor license agreements.  See the NOTICE file
    # distributed with this work for additional information
    # regarding copyright ownership.  The ASF licenses this file
    # to you under the Apache License, Version 2.0 (the
    # "License"); you may not use this file except in compliance
    # with the License.  You may obtain a copy of the License at
    #
    #  http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing,
    # software distributed under the License is distributed on an
    # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    # KIND, either express or implied.  See the License for the
    # specific language governing permissions and limitations
    # under the License.
    
    #表示admin的密码是123456 以下都是admin的参数设置,可以多个
    ftpserver.user.admin.userpassword=123456
    ftpserver.user.admin.homedirectory=/home/data/ftp
    ftpserver.user.admin.enableflag=true
    ftpserver.user.admin.writepermission=true
    ftpserver.user.admin.maxloginnumber=0
    ftpserver.user.admin.maxloginperip=0
    ftpserver.user.admin.idletime=0
    ftpserver.user.admin.uploadrate=0
    ftpserver.user.admin.downloadrate=0

    yml配置文件加入

    ftp:
    port: 21 #ftp连接端口
    passivePorts: 20 #被动连接数据传输端口
    passiveExternalAddress: 127.0.0.1 #部署的服务器ip地址

    然后启动SpringBoot服务

    工具连接

     账号密码就是配置文件里面的密码

    -----------------------有任何问题可以在评论区评论,也可以私信我,我看到的话会进行回复,欢迎大家指教------------------------ (蓝奏云官网有些地址失效了,需要把请求地址lanzous改成lanzoux才可以)
  • 相关阅读:
    js如何求一组数中的极值
    五星评分效果 原生js
    省市区三级联动
    jq表头固定
    css垂直居中 两种方法
    node.js grunt文件压缩
    js 定时器
    动态规划---最长公共子序列
    AES,RSA对称加密和非对称加密
    正则表达式学习笔记
  • 原文地址:https://www.cnblogs.com/pxblog/p/15016691.html
Copyright © 2011-2022 走看看