`
cqh520llr
  • 浏览: 509684 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

FTpUtil

 
阅读更多
import lombok.extern.log4j.Log4j2;
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;
import org.springframework.util.StringUtils;

import java.io.IOException;
import java.io.InputStream;

@Log4j2
public class FtpUtil {

    /**
     * Description: 向FTP服务器上传文件
     *
     * @param host     FTP服务器ip
     * @param port     FTP服务器端口
     * @param username FTP登录账号
     * @param password FTP登录密码
     * @param filePath FTP服务器文件存放路径
     * @param filename 上传到FTP服务器上的文件名
     * @param input    输入流
     * @return 成功返回true,否则返回false
     */
    public static boolean uploadFile(String host, int port, String username, String password,
                                     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服务器
            if (ftp.login(username, password)) {
                log.info("{}", "FTP login successfully !!!");
            }// 登录
            else {
                log.error("{}", "FTP login failed !!!");
            }
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return result;
            }

            //切换到上传目录,目录不存在则逐级创建
            String[] dirs = filePath.split("/");
            for (String str : dirs) {
                if(StringUtils.isEmpty(str)) {
                    continue;
                }
                if (!ftp.changeWorkingDirectory(str)) {
                    ftp.makeDirectory(str);
                    ftp.changeWorkingDirectory(str);
                }
            }
            //设置为被动模式
            ftp.enterLocalPassiveMode();
            //设置上传文件的类型为二进制类型
            ftp.setFileType(FTP.BINARY_FILE_TYPE);
            //上传文件
            if (ftp.storeFile(filename, input)) {
                result = true;
            } else {
                result = false;
            }
            input.close();
            ftp.logout();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return result;
    }

    //判断ftp服务器文件是否存在
    public static boolean existFile(FTPClient ftpClient, String path) throws IOException {
        boolean flag = false;
        FTPFile[] ftpFileArr = ftpClient.listFiles(path);
        if (ftpFileArr.length > 0) {
            flag = true;
        }
        return flag;
    }

    /**
     * 上传
     *
     * @param hostname    ip或域名地址
     * @param port        端口
     * @param username    用户名
     * @param password    密码
     * @param workingPath 服务器的工作目
     * @param inputStream 要上传文件的输入流
     * @param saveName    设置上传之后的文件名
     * @return
     */
    public static boolean upload(String hostname, int port, String username, String password, String workingPath, InputStream inputStream, String saveName) {
        boolean flag = false;
        FTPClient ftpClient = new FTPClient();
        ftpClient.setDataTimeout(2 * 60 * 1000);
        //1 测试连接
        if (connect(ftpClient, hostname, port, username, password)) {
            try {
                //2 检查工作目录是否存在
                if (ftpClient.changeWorkingDirectory(workingPath)) {
                    // 3 检查是否上传成功
                    if (storeFile(ftpClient, saveName, inputStream)) {
                        flag = true;
                        disconnect(ftpClient);
                    }
                } else {
                    log.error("{}", "目录不存在");
                }
            } catch (IOException e) {
                log.error("工作目录不存在");
                e.printStackTrace();
                disconnect(ftpClient);
            }
        }
        return flag;
    }

    /**
     * 断开连接
     *
     * @param ftpClient
     * @throws Exception
     */
    public static void disconnect(FTPClient ftpClient) {
        if (ftpClient.isConnected()) {
            try {
                ftpClient.disconnect();
                log.error("已关闭连接");
            } catch (IOException e) {
                log.error("没有关闭连接");
                e.printStackTrace();
            }
        }
    }

    /**
     * 测试是否能连接
     *
     * @param ftpClient
     * @param hostname  ip或域名地址
     * @param port      端口
     * @param username  用户名
     * @param password  密码
     * @return 返回真则能连接
     */
    public static boolean connect(FTPClient ftpClient, String hostname, int port, String username, String password) {
        boolean flag = false;
        try {
            //ftp初始化的一些参数
            ftpClient.connect(hostname, port);
            ftpClient.enterLocalPassiveMode();
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftpClient.setControlEncoding("UTF-8");
            if (ftpClient.login(username, password)) {
                log.info("连接ftp成功");
                flag = true;
            } else {
                log.error("连接ftp失败,可能用户名或密码错误");
                try {
                    disconnect(ftpClient);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        } catch (IOException e) {
            log.error("连接失败,可能ip或端口错误");
            e.printStackTrace();
        }
        return flag;
    }

    /**
     * 上传文件
     *
     * @param ftpClient
     * @param saveName        全路径。如/home/public/a.txt
     * @param fileInputStream 要上传的文件流
     * @return
     */
    public static boolean storeFile(FTPClient ftpClient, String saveName, InputStream fileInputStream) {
        boolean flag = false;
        try {
            if (ftpClient.storeFile(saveName, fileInputStream)) {
                flag = true;
                log.error("上传成功");
                disconnect(ftpClient);
            } else {
                log.error("{}", "上传失败");
            }
        } catch (IOException e) {
            log.error("上传失败");
            disconnect(ftpClient);
            e.printStackTrace();
        }
        return flag;
    }

}
分享到:
评论

相关推荐

    springboot-FtpUtil-master_springbootftputil_ftp_attentioniwd_DEM

    在本项目"springboot-FtpUtil-master_springbootftputil_ftp_attentioniwd_DEM"中,我们主要探讨的是如何在SpringBoot应用中集成FTP(File Transfer Protocol)客户端功能,以便实现文件的上传和下载操作。...

    最新版FTP上传需要的jar包和java FTPUtil例子

    标题提到的"FTPUtil例子"是一个Java类,它封装了FTP操作的逻辑,便于开发者在自己的项目中调用。 "commons-net-3.6.jar"是Apache Commons Net库的一个版本,这个库为Java提供了丰富的网络协议支持,包括FTP。Apache...

    ftputil python

    ftputil是一个Python库,专为简化FTP(文件传输协议)客户端编程而设计。它提供了一个高级接口,使得与FTP服务器交互类似于在本地文件系统上操作。这个库是为那些需要编写处理远程文件系统的应用程序的开发者量身...

    FtpUtil.java

    《FTPUtil.java——Java实现FTP文件传输工具类详解》 在Java编程中,FTPUtil.java是一个常见的工具类,用于处理FTP(File Transfer Protocol)文件传输协议相关的操作。它提供了便捷的方法来连接FTP服务器,上传、...

    ftputil.rar

    `ftputil`这个压缩包文件包含了一个Java实现的FTP客户端工具,可以帮助开发者通过编程方式登陆FTP服务器并遍历指定目录,获取其中的Java源代码文件。下面我们将详细探讨相关的知识点。 1. FTP基础: FTP是一个基于...

    FtpUtil.java(ftp工具类)

    ftp工具类,构造方法初始化类,连接ftp,列出所有文件内容,下载文件

    FTPUtil_ftp_

    FTPUtil_ftp_ 是一个基于Java编程语言实现的FTP客户端工具类,主要用于处理FTP(File Transfer Protocol)相关的操作,如上传文件、下载文件以及批量上传和下载。在IT行业中,FTP是一个广泛使用的协议,用于在计算机...

    基于springboot的FtpUtil工具类.zip

    《基于SpringBoot的FTPUtil工具类详解》 在IT领域,SpringBoot框架因其简洁的配置、快速的开发特性,已经成为Java开发的首选。而在实际项目中,文件上传和下载是常见的功能之一,FTP(File Transfer Protocol)作为...

    FtpUtil工具类

    淘淘商城FtpUtil工具类 , 使用java代码访问ftp服务器 使用apache的FTPClient工具访问ftp服务器

    FtpUtil工具类源码

    FtpUtil工具类源码

    FTPUtil.vb 利用Socket 实现FTP文件上传和文件下载

    FTPUtil.vb是一个VB.NET编写的实用工具,它利用Socket编程接口实现了FTP(File Transfer Protocol)文件上传和下载的功能。FTP是一种广泛应用于互联网上的协议,主要用于在客户端与服务器之间进行文件传输。Socket是...

    ftpUtil.zip,FTP相关工具类

    https://blog.csdn.net/weixin_45044097/article/details/109637761,这是原文。上传的资源是ftp上传的两个工具类,接近1500行代码,实现ftp连接,文件获取,上传,下载

    ftputil + ftpclientPOOL

    标题 "ftputil + ftpclientPOOL" 暗示了这个话题主要围绕两个Python库——ftputil和ftpclientPOOL,它们是用来处理FTP(文件传输协议)操作的工具。在这个场景下,我们可能会讨论如何使用这两个库进行高效的FTP文件...

    FTP文件上传

    这里我们将深入探讨如何在Java中实现图片文件的FTP上传,以及如何使用`FtpUtil.java`工具类。 首先,`FtpUtil.java`通常是一个封装了FTP操作的工具类,包括连接、登录、上传文件、断开连接等方法。在`FtpUtil`中,...

    FTPUtil.java

    java FTP工具类,里面包含登陆,注销,查询FTP文件夹,以及下载进度条输出

Global site tag (gtag.js) - Google Analytics