zoukankan      html  css  js  c++  java
  • 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);
        }
  • 相关阅读:
    js截取字符串区分汉字字母代码
    List 去处自定义重复对象方法
    63. Unique Paths II
    62. Unique Paths
    388. Longest Absolute File Path
    41. First Missing Positive
    140. Word Break II
    139. Word Break
    239. Sliding Window Maximum
    5. Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/Dylansuns/p/7295951.html
Copyright © 2011-2022 走看看