iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Spring FTP如何实现上传下载工具类
  • 135
分享到

Spring FTP如何实现上传下载工具类

springftp 2023-05-30 18:05:19 135人浏览 安东尼
摘要

这篇文章给大家分享的是有关spring FTP如何实现上传下载工具类的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最近在项目中需要和ftp服务器进行交互,在网上找了一下关于ftp上传下载的工具类,大致有两种。  

这篇文章给大家分享的是有关spring FTP如何实现上传下载工具类的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

最近在项目中需要和ftp服务器进行交互,在网上找了一下关于ftp上传下载的工具类,大致有两种。

  第一种是单例模式的类。

  第二种是另外定义一个Service,直接通过Service来实现ftp的上传下载。

  这两种感觉都有利弊。

  第一种实现了代码复用,但是配置信息全需要写在类中,维护比较复杂。

  第二种如果是spring框架,可以通过propertis文件,动态的注入配置信息,但是又不能代码复用。

  所以我打算自己实现一个工具类,来把上面的两种优点进行整合。顺便把一些上传过程中一些常见的问题也给解决了。

  因为我使用的是spring框架,如果把工具类声明为bean给spring管理,他默认就是单例的,所以不需要我再实现单例。并且因为是bean,所以我可以把properties文件的属性注入bean的属性中,实现解耦,下面是具体代码:

package com.cky.util;import java.io.File;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;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;//使用spring自动生成单例对象,//@Componentpublic class FtpUtil {  //通过properties文件自动注入  @Value("${ftp.host}")  private String host;  //ftp服务器ip  @Value("${ftp.port}")  private int port;    //ftp服务器端口  @Value("${ftp.username}")  private String username;//用户名  @Value("${ftp.passWord}")  private String password;//密码  @Value("${ftp.basePath}")  private String basePath;//存放文件的基本路径  //测试的时候把这个构造函数打开,设置你的初始值,然后在代码后面的main方法运行测试      public boolean fileUpload(String path,String filename,InputStream input) {    FTPClient ftp=new FTPClient();    try {      ftp.connect(host, port);      ftp.login(username, password);      //设置文件编码格式      ftp.setControlEncoding("UTF-8");      //ftp通信有两种模式        //PORT(主动模式)客户端开通一个新端口(>1024)并通过这个端口发送命令或传输数据,期间服务端只使用他开通的一个端口,例如21        //PASV(被动模式)客户端向服务端发送一个PASV命令,服务端开启一个新端口(>1024),并使用这个端口与客户端的21端口传输数据        //由于客户端不可控,防火墙等原因,所以需要由服务端开启端口,需要设置被动模式      ftp.enterLocalPassiveMode();      //设置传输方式为流方式      ftp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);      //获取状态码,判断是否连接成功      if(!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {        throw new RuntimeException("FTP服务器拒绝连接");      }      //转到上传文件的根目录      if(!ftp.changeWorkingDirectory(basePath)) {        throw new RuntimeException("根目录不存在,需要创建");      }      //判断是否存在目录      if(!ftp.changeWorkingDirectory(path)) {        String[] dirs=path.split("/");        //创建目录        for (String dir : dirs) {          if(null==dir||"".equals(dir)) continue;          //判断是否存在目录          if(!ftp.changeWorkingDirectory(dir)) {            //不存在则创建            if(!ftp.makeDirectory(dir)) {              throw new RuntimeException("子目录创建失败");            }            //进入新创建的目录            ftp.changeWorkingDirectory(dir);          }        }        //设置上传文件的类型为二进制类型        ftp.setFileType(FTP.BINARY_FILE_TYPE);        //上传文件        if(!ftp.storeFile(filename, input)) {          return false;        }        input.close();        ftp.loGout();        return true;      }    } catch (Exception e) {      throw new RuntimeException(e);    }finally {      if(ftp.isConnected()) {        try {          ftp.disconnect();        } catch (IOException e) {          throw new RuntimeException(e);        }      }    }    return false;  }    public boolean downloadFile(String filename,String localPath) {    FTPClient ftp=new FTPClient();    try {      ftp.connect(host, port);      ftp.login(username, password);      //设置文件编码格式      ftp.setControlEncoding("UTF-8");      //ftp通信有两种模式        //PORT(主动模式)客户端开通一个新端口(>1024)并通过这个端口发送命令或传输数据,期间服务端只使用他开通的一个端口,例如21        //PASV(被动模式)客户端向服务端发送一个PASV命令,服务端开启一个新端口(>1024),并使用这个端口与客户端的21端口传输数据        //由于客户端不可控,防火墙等原因,所以需要由服务端开启端口,需要设置被动模式      ftp.enterLocalPassiveMode();      //设置传输方式为流方式      ftp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);      //获取状态码,判断是否连接成功      if(!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {        throw new RuntimeException("FTP服务器拒绝连接");      }      int index=filename.lastIndexOf("/");      //获取文件的路径      String path=filename.substring(0, index);      //获取文件名      String name=filename.substring(index+1);      //判断是否存在目录      if(!ftp.changeWorkingDirectory(basePath+path)) {        throw new RuntimeException("文件路径不存在:"+basePath+path);      }      //获取该目录所有文件      FTPFile[] files=ftp.listFiles();      for (FTPFile file : files) {        //判断是否有目标文件        //System.out.println("文件名"+file.getName()+"---"+name);        if(file.getName().equals(name)) {          //System.out.println("找到文件");          //如果找到,将目标文件复制到本地          File localFile =new File(localPath+"/"+file.getName());          OutputStream out=new FileOutputStream(localFile);          ftp.retrieveFile(file.getName(), out);          out.close();        }      }      ftp.logout();      return true;    } catch (Exception e) {      throw new RuntimeException(e);    }finally {      if(ftp.isConnected()) {        try {          ftp.disconnect();        } catch (IOException e) {          throw new RuntimeException(e);        }      }    }  }  //两个功能其中一个使用的话另一个需要注释  public static void main(String []args) {    //上传测试-----------------------------------        //下载测试--------------------------------------    String filename="/2015/06/04/aa.jpg";    String localPath="F:\\";    FtpUtil ftputil=new FtpUtil();    ftputil.downloadFile(filename, localPath);  }  //get set方法自己添加  //..............}

具体使用

配置spring加载properties文件

applicationContext.xml

<context:property-placeholder location="classpath:*.properties"/>  ftp.propertiesftp.host=192.168.100.77ftp.port=21ftp.username=ftpuserftp.password=ftp54321ftp.basePath=/home/ftpuser/

将工具类声明为bean

xml方式

<bean id="ftpUtil" class="com.cky.util.FtpUtil">    <property name="host" value="${ftp.host}"></property>    <property name="port" value="${ftp.port}"></property>    <property name="username" value="${ftp.username}"></property>    <property name="password" value="${ftp.password}"></property>    <property name="basePath" value="${ftp.basePath}"></property>  </bean>

注解方式,组件扫描

<context:component-scan base-package="com.cky.util"></context:component-scan>

第三部:注入使用

@Autowired  private FtpUtil ftpUtil;

感谢各位的阅读!关于“Spring FTP如何实现上传下载工具类”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: Spring FTP如何实现上传下载工具类

本文链接: https://www.lsjlt.com/news/220325.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Spring FTP如何实现上传下载工具类
    这篇文章给大家分享的是有关Spring FTP如何实现上传下载工具类的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最近在项目中需要和ftp服务器进行交互,在网上找了一下关于ftp上传下载的工具类,大致有两种。  ...
    99+
    2023-05-30
    spring ftp
  • java实现上传和下载工具类
    本文实例为大家分享了文件上传到ftp服务工具类,供大家参考,具体内容如下直接引用此java工具类就好import java.io.File;import java.io.FileInputStream;import java.io.File...
    99+
    2023-05-31
    java 上传 下载
  • python实现FTP上传下载
    要求:支持多用户在线的FTP程序 要求:1、用户加密认证2、允许同时多用户登录3、每个用户有自己的家目录 ,且只能访问自己的家目录4、对用户进行磁盘配额,每个用户的可用空间不同5、允许用户在ftp server上随意切换目录6、允许用户查看...
    99+
    2023-01-31
    上传下载 python FTP
  • Java怎么实现的文件上传下载工具类
    小编给大家分享一下Java怎么实现的文件上传下载工具类,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!本文实例讲述了Java实现的文件上传下载工具类。分享给大家供大家参考,具体如下:这是一个在Eclipse环境下采用Java...
    99+
    2023-05-30
    java
  • Java实现ftp的上传、下载
    ftp登录命令: windows环境下登录:文件管理资源的地址栏中输入“ftp://ip:port”,然后根据提示输入账号、密码。linux环境下登录:ftp ip,然后根据提示输入账号、密码,lin...
    99+
    2023-09-26
    java linux 服务器
  • Java实现FTP上传与下载功能
    本文实例为大家分享了Java实现FTP上传与下载的具体代码,供大家参考,具体内容如下 JAVA操作FTP服务器,只需要创建一个FTPClient即可,所有的操作都封装在FTPClie...
    99+
    2024-04-02
  • Java操作FTP实现上传下载功能
    目录FTP简介FTP架构FTP数据连接模式用户认证客户端Vsftp安装与配置启动服务配置文件说明传输模式配置系统用户配置java操作ftp文件服务器1.引入依赖2.提供接口3.对提供...
    99+
    2022-11-13
    Java FTP上传下载 Java FTP上传 Java FTP下载 Java FTP
  • nodejs怎么连接ftp实现上传下载
    这篇文章主要介绍“nodejs怎么连接ftp实现上传下载”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“nodejs怎么连接ftp实现上传下载”文章能帮助大家解决问题。依赖//ftp 模块是...
    99+
    2023-07-06
  • java实现ftp文件上传下载功能
    本文实例为大家分享了ftp实现文件上传下载的具体代码,供大家参考,具体内容如下package getUrlPic;import java.io.ByteArrayInputStream;import java.io.IOException;...
    99+
    2023-05-31
    ftp 上传 下载
  • 如何在JAVA项目中利用FTPClient工具类实现一个上传下载功能
    如何在JAVA项目中利用FTPClient工具类实现一个上传下载功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、写一个javabean文件,描述ftp上传...
    99+
    2023-05-31
    java ftpclient ava
  • 基于Spring上下文工具类 ApplicationContextUtil
    目录Spring上下文工具类 ApplicationContextUtil获取ApplicationContext的工具类方式一方式二方式三方式四方式五Spring上下文工具类 Ap...
    99+
    2024-04-02
  • Linux下如何使用Shell脚本实现ftp的自动上传下载
    小编给大家分享一下Linux下如何使用Shell脚本实现ftp的自动上传下载,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. ftp自动登录批量下载文件。代码如下:#####从ftp服务器上的/home/data 到 本...
    99+
    2023-06-09
  • Spring MVC实现文件上传和下载
    本文实例为大家分享了Spring MVC实现文件上传和下载的具体代码,供大家参考,具体内容如下 文件上传 1、导入主要依赖 <!--文件上传--> <depe...
    99+
    2024-04-02
  • Spring Boot实现文件上传和下载
    实现Spring Boot文件上传和下载的步骤: 1.文件上传 在pom.xml文件中添加依赖:spring-boot-starter-web和spring-boot-starter-thymelea...
    99+
    2023-09-06
    spring boot java servlet
  • FileZilla-Linux ftp上传工具如何安装配置
    这篇文章主要为大家展示了“FileZilla-Linux ftp上传工具如何安装配置”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“FileZilla-Linux ftp上传工具如何安装配置”这篇...
    99+
    2023-06-16
  • Java怎么实现FTP的上传与下载功能
    这篇文章主要讲解了“Java怎么实现FTP的上传与下载功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java怎么实现FTP的上传与下载功能”吧!JAVA操作FTP服务器,只需要创建一个F...
    99+
    2023-06-29
  • Spring MVC 实现文件的上传和下载
    文章目录 前言1. 文件上传1.1 文件上传介绍1.2 文件上传实现1.2.1 添加依赖1.2.2 配置上传解析器1.2.3 通过表单上传1.2.4 创建控制器类1.2.5 上传演示 ...
    99+
    2023-09-26
    spring mvc java java-ee
  • Java性能工具JMeter实现上传与下载脚本编写
    目录一、前言二、预备知识1、构造方法2、创建功能3、重命名和删除功能4、获取功能三、Java 实现文件上传下载功能1、服务下载代码2、前端代码3、运行效果四、JMeter 文件上传与...
    99+
    2024-04-02
  • springboot实现后台上传图片(工具类)
    本文实例为大家分享了springboot实现后台上传图片的具体代码,供大家参考,具体内容如下 1.先配置启动类 继承WebMvcConfigurer 重写方法 @SpringBo...
    99+
    2024-04-02
  • C#利用FluentFTP实现FTP上传下载功能详解
    目录FTP基础知识FTP环境搭建FluentFTP安装示例演示示例源码FTP作为日常工作学习中,非常重要的一个文件传输存储空间,想必大家都非常的熟悉了,那么如何快速的实现文件的上传下...
    99+
    2023-02-21
    C#实现FTP上传下载 C# FTP上传下载 C# FTP上传 C# FTP下载 C# FTP
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作