• FTP服务器文件上传的代码实现


    方式一:

    @Test
        public void testFtpClient() throws Exception {
            // 1、创建一个FtpClient对象
            FTPClient ftpClient = new FTPClient();
            // 2、创建ftp连接,默认是21端口
            ftpClient.connect("192.168.1.121", 21);
            // 3、登录ftp服务器,使用用户名和密码
            ftpClient.login("ftpuser", "root");
            // 4、上传文件
            // 读取本地文件
            FileInputStream inputStream = new FileInputStream(new File("D:\image\1.jpg"));
            // 设置上传路径
            ftpClient.changeWorkingDirectory("/home/ftpuser/taotao/images");
            // 修改上传文件的格式
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            // 第一个参数:服务器端文档名
            // 第二个参数:上传文档的inputStream
            ftpClient.storeFile("hello.jpg", inputStream);
            // 5、关闭连接
            ftpClient.logout();
        }

    方式二:

    使用FTP工具类FtpUtil

    package com.taotao.common.utils;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    import org.apache.commons.net.ftp.FTP;
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPFile;
    import org.apache.commons.net.ftp.FTPReply;
    
    /**
    * @ClassName: FtpUtil
    * @Description: ftp上传下载工具类
    * @author Administrator
    * @date 2017年8月6日
    */
    public class FtpUtil
    {
        /**
         * Description: 向FTP服务器上传文件
         * 
         * @param host FTP服务器hostname
         * @param port FTP服务器端口
         * @param username FTP登录账号
         * @param password FTP登录密码
         * @param basePath FTP服务器基础目录
         * @param filePath FTP服务器文件存放路径。例如分日期存放:/2017/08/06。文件的路径为basePath+filePath
         * @param filename 上传到FTP服务器上的文件名
         * @param input 输入流
         * @return 成功返回true,否则返回false
         */
        public static boolean uploadFile(String host, int port, String username, String password, String basePath,
            String filePath, String filename, InputStream input)
        {
            boolean result = false;
            FTPClient ftp = new FTPClient();
            try
            {
                int reply;
                ftp.connect(host, port);// 连接FTP服务器
                // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
                ftp.login(username, password);// 登录
                reply = ftp.getReplyCode();
                if (!FTPReply.isPositiveCompletion(reply))
                {
                    ftp.disconnect();
                    return result;
                }
                // 切换到上传目录
                if (!ftp.changeWorkingDirectory(basePath + filePath))
                {
                    // 如果目录不存在创建目录
                    String[] dirs = filePath.split("/");
                    String tempPath = basePath;
                    for (String dir : dirs)
                    {
                        if (null == dir || "".equals(dir))
                            continue;
                        tempPath += "/" + dir;
                        if (!ftp.changeWorkingDirectory(tempPath))
                        {
                            if (!ftp.makeDirectory(tempPath))
                            {
                                return result;
                            }
                            else
                            {
                                ftp.changeWorkingDirectory(tempPath);
                            }
                        }
                    }
                }
                // 设置上传文件的类型为二进制类型
                ftp.setFileType(FTP.BINARY_FILE_TYPE);
                // 上传文件
                if (!ftp.storeFile(filename, input))
                {
                    return result;
                }
                input.close();
                ftp.logout();
                result = true;
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            finally
            {
                if (ftp.isConnected())
                {
                    try
                    {
                        ftp.disconnect();
                    }
                    catch (IOException ioe)
                    {
                    }
                }
            }
            return result;
        }
        
        /**
         * Description: 从FTP服务器下载文件
         * 
         * @param host FTP服务器hostname
         * @param port FTP服务器端口
         * @param username FTP登录账号
         * @param password FTP登录密码
         * @param remotePath FTP服务器上的相对路径
         * @param fileName 要下载的文件名
         * @param localPath 下载后保存到本地的路径
         * @return
         */
        public static boolean downloadFile(String host, int port, String username, String password, String remotePath,
            String fileName, String localPath)
        {
            boolean result = false;
            FTPClient ftp = new FTPClient();
            try
            {
                int reply;
                ftp.connect(host, port);
                // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
                ftp.login(username, password);// 登录
                reply = ftp.getReplyCode();
                if (!FTPReply.isPositiveCompletion(reply))
                {
                    ftp.disconnect();
                    return result;
                }
                ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
                FTPFile[] fs = ftp.listFiles();
                for (FTPFile ff : fs)
                {
                    if (ff.getName().equals(fileName))
                    {
                        File localFile = new File(localPath + "/" + ff.getName());
                        
                        OutputStream is = new FileOutputStream(localFile);
                        ftp.retrieveFile(ff.getName(), is);
                        is.close();
                    }
                }
                ftp.logout();
                result = true;
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            finally
            {
                if (ftp.isConnected())
                {
                    try
                    {
                        ftp.disconnect();
                    }
                    catch (IOException ioe)
                    {
                    }
                }
            }
            return result;
        }
    }

    测试工具类:

    @Test
        public void testFtpUtil() throws Exception {
            // 读取本地文件
            FileInputStream inputStream = new FileInputStream(new File("D:\image\11.jpg"));
            FtpUtil.uploadFile("192.168.1.121", 21, "ftpuser", "root", "/home/ftpuser/taotao/images", "/2017/08/06", "11.jpg", inputStream);
        }
  • 相关阅读:
    3spring:生命周期,属性赋值,自动装配
    2spring注解:@Lazy,@Conditional,@import,FactoryBean接口
    1spring注解:@Configuration,@Bean,@ComponentScan(),@Scope
    10.spring:常用的数据库代码.....(不长使用了解即可)
    9.spring:事务管理(下):声明式事务管理
    原生JavaScript实现hasClass、addClass、removeClass、toggleClass
    表格去重复边框
    缓存工厂之Redis缓存
    【实践】Memcached实例解析
    c# is和as的区别
  • 原文地址:https://www.cnblogs.com/Dylansuns/p/7295951.html
Copyright © 2020-2023  润新知