Java实现文件上传到ftp服务器

这篇具有很好参考价值的文章主要介绍了Java实现文件上传到ftp服务器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、ftp简介

文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的, 而且是面向连接, 为数据传输提供可靠保证。

FTP允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。然而, 用户并不真正登录到自己想要存取的计算机上面而成为完全用户, 可用FTP程序访问远程资源, 实现用户往返传输文件、目录管理以及访问电子邮件等等, 即使双方计算机可能配有不同的操作系统和文件存储方式。

1.1工作流程

在传输文件时,FTP 客户端程序先与服务器建立连接,然后向服务器发送命令。服务器收到命令后给予响应,并执行命令。FTP 协议与操作系统无关,任何操作系统上的程序只要符合 FTP 协议,就可以相互传输数据

1.2工作模式

FTP支持两种模式:Standard (PORT方式,主动方式),Passive (PASV,被动方式)

1.3传输方式

FTP的传输有两种方式:ASCII、二进制

二、windows开启ftp服务

在自己的电脑上可以开启一个ftp服务用于测试。

1:打开控制面板—>程序—>启动或关闭windows功能

找到互联网信息服务勾选✔其中的ftp服务器,web管理,万维网服务。

系统就会安装IIS服务管理器了,安装过程可能需要等待几分钟。

java上传ftp,java,服务器,java,网络

2:回到电脑桌面,右击“计算机”,点击 管理,进入计算机管理界面。在这里,我们就可以看到刚刚添加的IIS服务,接下来的操作就像我们在VPS主机上添加网站差不多的操作步骤了。选中IIS服务——>网站——>右键添加FTP站点

java上传ftp,java,服务器,java,网络

3:设置ftp基本信息。路径为远程连接的工作路径

java上传ftp,java,服务器,java,网络

选取本机的IP地址,SSL如果不涉密可以选无。

java上传ftp,java,服务器,java,网络

这里权限先这样设置之后再修改,点击完成即可。

java上传ftp,java,服务器,java,网络

保存后在此后即可看到添加的ftp服务。可以这样开启多个。

java上传ftp,java,服务器,java,网络

注意:

要想通过java程序连接FTP在这里我新建了一个FTP的用户,新建一个用户ftptest,密码:123456,如下所示

java上传ftp,java,服务器,java,网络

这里注意一定要把√取消掉确定完成新建,之后修改FTP服务器设置,添加这个特定用户。

java上传ftp,java,服务器,java,网络

java上传ftp,java,服务器,java,网络

点击创建的ftp名称—>ftp身份验证—>修改身份认证,禁止匿名身份

java上传ftp,java,服务器,java,网络

java上传ftp,java,服务器,java,网络

java上传ftp,java,服务器,java,网络

返回最开始的页面,添加刚才创建的用户,如果创建用户对勾选着可能添加不成功。

java上传ftp,java,服务器,java,网络

java上传ftp,java,服务器,java,网络

输入刚才新建的用户名和密码,完成

java上传ftp,java,服务器,java,网络

如何测试刚才新建的用户是否有效嘞有好多种方法常用的是CMD命令行和下面介绍的这种

打开我的电脑在最上面输入

ftp://+FTP之前设置的IP地址

我的是ftp://192.168.10.11/回车

输入用户和密码即可登录

注意:如果输入后弹出FTP文件夹错误,需要查看一下防火墙是否放行FTP服务器

java上传ftp,java,服务器,java,网络

解决方式:

1、打开防火墙,点击允许应用或功能通过Windows Defender防火墙

java上传ftp,java,服务器,java,网络

2、找到FTP服务器并勾选,然后点击确定

java上传ftp,java,服务器,java,网络

三、java连接ftp

org.apache.commons.net提供了对FTP的开发,引入以下依赖

<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.9.0</version>
</dependency>

3.1ftp工具类

连接ftp服务

@Slf4j
public class FtpClient {

   /**
    * FTP服务地址
    */
   private static String FTP_IP;
   /**
    * FTP端口号
    */
   private static Integer FTP_PORT;
   /**
    * FTP用户名
    */
   private static String FTP_USER;
   /**
    * FTP密码
    */
   private static String FTP_PASSWORD;
   /**
    * FTP根路径
    */
   private static String FTP_PATH;
   /**
    * 映射盘符
    */
   private static String FTP_DRIVELETTER;
   private static FTPClient ftpClient;

   static {
      try {
         // 根据该类的class文件获取到yaml文件
         Yaml yaml = new Yaml();
         URL resource = FtpClient.class.getClassLoader().getResource("application-dev.yml");
         assert resource != null;
         // 把yaml文件加载到对象中
         Object obj = yaml.load(new FileInputStream(resource.getFile()));
         // 解析对象中的属性并赋值
         JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(obj));
         JSONObject ftp = jsonObject.getObject("fanhai", JSONObject.class).getObject("ftp", JSONObject.class);
         FTP_IP = String.valueOf(ftp.get("ip"));
         FTP_PORT = Integer.valueOf(String.valueOf(ftp.get("port")));
         FTP_USER = String.valueOf(ftp.get("username"));
         FTP_PASSWORD = String.valueOf(ftp.get("password"));
      } catch (Exception e) {
         e.printStackTrace();
      }
   }

   public static FTPClient getFtpConnection() {
      ftpClient = new FTPClient();
      try {
         //连接
         ftpClient.connect(FtpClient.FTP_IP, FtpClient.FTP_PORT);
         //设置编码
         ftpClient.setControlEncoding("UTF-8");
         //设置传输文件类型
         ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
         //登录
         ftpClient.login(FtpClient.FTP_USER, FtpClient.FTP_PASSWORD);
         if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
            log.info("==============未连接到FTP,用户名或密码错误=================");
            //拒绝连接
            ftpClient.disconnect();
         } else {
            log.info("==============连接到FTP成功=================");
         }
      } catch (SocketException e) {
         e.printStackTrace();
         log.info("==============FTP的IP地址错误==============");
      } catch (IOException e) {
         e.printStackTrace();
         log.info("==============FTP的端口错误==============");
      }
      return ftpClient;
   }

   public static void closeConnect() {
      log.warn("关闭ftp服务器");
      try {
         if (ftpClient != null) {
            ftpClient.logout();
            ftpClient.disconnect();
         }
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

ftp工具类,进行文件的上传、下载操作文章来源地址https://www.toymoban.com/news/detail-627309.html

public class FtpUtils {
   /**
    * 上传单个文件到远程
    *
    * @param ftpPath        路径
    * @param uploadFileName 文件名
    * @param input          输入流
    * @return
    */
   public static boolean uploadFile(String ftpPath, String uploadFileName, InputStream input) {
      boolean issuccess = false;
      FTPClient ftpClient = null;
      try {
         ftpClient = FtpClient.getFtpConnection();

         //切换到工作目录
         if (!ftpClient.changeWorkingDirectory(ftpPath)) {
            ftpClient.changeWorkingDirectory("/");
            String[] dirs = ftpPath.split("/");
            for (String dir : dirs) {
               ftpClient.makeDirectory(dir);
               ftpClient.changeWorkingDirectory(dir);
            }
         }

         ftpClient.enterLocalPassiveMode();//工作模式被动
         //文件写入 远程文件名;输入流
         boolean storeFile = ftpClient.storeFile(uploadFileName, input);
         if (!storeFile) {
            return issuccess;
         }
         input.close();
         ftpClient.logout();
         issuccess = true;
      } catch (IOException e) {
         e.printStackTrace();
      } finally {
         if (ftpClient.isConnected()) {
            try {
               ftpClient.disconnect();
            } catch (IOException ioe) {
            }
         }
      }
      return issuccess;
   }

   private String inputStreamToString(InputStream inputStream) {
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
      StringBuffer stringBuffer = new StringBuffer();
      String oneLine = "";
      try {
         while ((oneLine = bufferedReader.readLine()) != null) {
            stringBuffer.append(oneLine);
         }
         return stringBuffer.toString();
      } catch (IOException e) {
         e.printStackTrace();
      }
      return null;
   }
}

到了这里,关于Java实现文件上传到ftp服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java实现以form-data形式文件上传到服务器

    Java实现以form-data形式文件上传到服务器

    2024年02月13日
    浏览(50)
  • Java 两台服务器间使用FTP进行文件传输

    背景:需要把服务器A中的文件拷贝至服务器B中,要求使用FTP进行传输,当文件传输未完成时文件是tmp格式的,传输完毕后显示为原格式(此处是grib2)。

    2024年02月15日
    浏览(49)
  • java通过FTP跨服务器动态监听读取指定目录下文件数据

    1、文件数据在A服务器(windows)(不定期在指定目录下生成),项目应用部署在B服务器(Linux); 2、项目应用在B服务器,监听A服务器指定目录,有新生成文件,进行读取文件信息,持久化数据; 3、提供两块内容,第一安装windows FTP服务;第二项目源码,希望可以帮助到你

    2024年02月03日
    浏览(61)
  • FTP服务器文件自动上传、下载(bat)

    tips: 可以参照标题3上面的配置,自行调整本地路径、FTP服务器路径、账号密码等

    2024年02月15日
    浏览(42)
  • python 数据文件上传到ftp服务器

    场景:客户的某数据文件需要定时推送到一个第三方平台的ftp服务器上,第三方平台会对上传过来的数据文件进行解析。 一、通过FTP将文件上传到服务器,需要满足以下几个条件: 本服务器和ftp服务器是联通的 需要ftp服务器的IP,用户,密码,端口,ftp服务器文件要存放的

    2024年02月15日
    浏览(62)
  • Java Websocket发送文件给Vue客户端接收并上传,实现检测U盘插入并将指定文件上传到服务器功能

    应用环境: B/S架构 需求描述: 1、判断U盘接入 2、扫描U盘指定文件,将满足条件的文件发送给服务器 解决思路: 1、因为bs架构,无法获取本机资源,计划在U盘所在服务器部署websocket服务 2、websocket服务扫描u盘,拿到指定文件,使用session.getBasicRemote().sendBinary(data)分批发送二

    2024年01月15日
    浏览(56)
  • java上传文件到指定服务器

    首先要知道服务器的用户名和密码。 注意:一般情况,如果不是强制要求,尽量不要将文件上传到服务器 步骤: 1.导入依赖 !--图片上传到服务器需要的依赖--         dependency             groupIdcom.jcraft/groupId             artifactIdjsch/artifactId             version0.1.54/version

    2024年01月21日
    浏览(52)
  • Java 上传文件到MinIO服务器上

    一、MinIO配置 主界面: 2.创建桶的文件路径 你可以设置任意想要配置的路径  3.管理桶权限 这里Prefix写 * 是为了匹配所有请求路径 Access: readonly就可以通过url访问图片了。 二、SpringBoot Maven项目: 导入坐标:  三、配置application.yml文件 四、编写读取配置类 五、创建工具类 六

    2024年02月08日
    浏览(47)
  • Java从sftp服务器上传与下载文件

    业务需要从sftp服务器上上传、下载、删除文件等功能,通过查阅资料及手动敲打代码,实现了操作sftp的基本功能,有需求的小伙伴可以看看具体的实现过程。 摘自百度百科:SSH文件传输协议,是一种数据流链接,提供文件访问、传输和管理功能的网络传输协议。 SFTP允许用

    2024年02月11日
    浏览(62)
  • java连接sftp服务器实现上传下载

    我最初的需求是java读取远程windows服务器的文件。查了一圈,发现将远程服务器作为ftp服务器是最方便快捷的。着手准备,首先要让远程服务器提供ftp服务,再做相关配置,然后通过代码配置远程地址,用户名密码(ftp服务设置)读取文件。 我目前使用的是 freeSSHd.exe,下载后

    2024年02月07日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包