【日常开发之FTP】Windows开启FTP、Java实现FTP文件上传下载

【日常开发之FTP】windows开启FTP、Java实现FTP文件上传下载

  • FTP前言
    • FTP是什么?
    • FTP两种模式
  • Windows开启FTP
    • FTP windows 配置
    • 防火墙配置
  • Java部分
    • Maven配置
    • 创建FTPClient
  • 注意

FTP前言

FTP是什么?

FTP是一个专门进行文件管理的操作服务,一般来讲可以在任意的操作系统之中进行配置,但是如果考虑到简便性,一般来讲可以直接在Linux系统下进行安装。
FTP (File Transfer Protocol、文件传输协议)是TCP/IP协议中的一部分,属于应用层协议。使用FTP最主要的功能是对文件进行管理,所以在FTP内部对于文件支持有两种传输模式:文本模式(ASCII、默认)和二进制模式(Binary),通常文本文件使用ASCIl模式,而对于图片、视频、声音、压缩等文件则会使用二进制的方式进行传输。
FTP的操作一般是分为服务端以及客户端两个组成部分,客户端需要通过特定的FTP服务进行服务器的连接(大部分的FTP服务器上都是需要进行用户登录认证的)。

FTP两种模式

如果要进行FTP文件的管理,则客户端一定要与FTP服务器进行连接,在FTP中每一次通讯实际上都需要有两个连接存在,一个连接专门用于传输FTP命令、另外一个连接负责数据传送,所以在FTP中一般会支持两种不同的工作模式:一种是Standard模式(也被称为PORT模式),另外一种是Passive (也被称为PASV模式),这两种模式的概念如下:

PORT主动模式
当客户端与服务端连接后,客户端会打开一个新的本地端口,随后将此端口告诉给FTP服务端,这样FTP服务端就会主动的连接到FTP客户端公布的端口,随后进行数据传送。

PASV被动模式
FTP在定义的时候就公布了一个操作端口(一般为21端口),这样当客户端连接之后会明确的知道该操作端口并且进行数据传送。

在实际的FTP运行机制之中,如果要想通过FTP服务进行操作,则一般会使用被动模式,在所有的系统中几乎都会存在有防火墙的概念,如果要考虑到客户端的方便使用的话,被动的模式会更加的合理。

Windows开启FTP

进入控制面板–》程序–》启用或关闭windows功能
在这里插入图片描述
开启FTP服务勾选红色方框内的选项点击确定

在这里插入图片描述

FTP windows 配置

win + R 输入 inetmgr

在这里插入图片描述

进入如下界面
在这里插入图片描述
箭头指向点击–》右键添加FTP站点
在这里插入图片描述

站点名称:FTP
物理路径:选择你FTP开放的路径
在这里插入图片描述
注意:这个ip地址要配你暴露出去的地址,如果是作为FTP服务器,要保证这个ip其他节点能够ping通
选择无ssl
在这里插入图片描述
这里的用户可以指定用户也可以选择所有用户
权限要写读写,不然无法进行上传下载
在这里插入图片描述
双击左侧FTP
在这里插入图片描述
查看各项信息是否正确
在这里插入图片描述
在这里插入图片描述

防火墙配置

控制面板–》系统安全–》Windows Defender 防火墙–》允许的应用中勾选FTP
在这里插入图片描述
点击我的电脑右键选择管理右键用户,选择新用户添加
在这里插入图片描述

Java部分

Maven配置

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

创建FTPClient

上传

public static void main(String[] args) throws IOException {String server = "192.168.0.121";int port = 21;String user = "ftp";String pass = "123456";FTPClient ftp = new FTPClient();FileInputStream fileInputStream =null;try {ftp.connect(server, port);ftp.login(user, pass);//这个方法的意思就是每次数据连接之前,ftp client告诉ftp server开通一个端口来传输数据ftp.enterLocalPassiveMode();// 二进制文件传输ftp.setFileType(FTPClient.BINARY_FILE_TYPE);ftp.setControlEncoding("UTF-8");ftp.setBufferSize(2048);// 上传文件的路径String remoteFilePath = "/WorkSpace/啊啊啊.csv";//远程路径一定要进行编码否则上传失败remoteFilePath = new String(remoteFilePath.getBytes("GBK"), "iso-8859-1");// 本地文件的路径String localFilePath = "/WorkSpace/Test/啊啊啊.csv";// 使用storeFile上传文件if (ftp.storeFile(remoteFilePath,fileInputStream = new FileInputStream(new File(localFilePath)))) {System.out.println("文件上传成功");}} catch (IOException ex) {ex.printStackTrace();} finally {try {if (ftp.isConnected()) {ftp.logout();ftp.disconnect();}//手动关流if(fileInputStream!=null){fileInputStream.close();}} catch (IOException ex) {ex.printStackTrace();}}}

下载

//我这边项目运行是在D盘所以不需要加盘符
//remoteFile  FTP路径 /WorkSpace/Test/啊啊啊.csv
//localFile   要存储到本地的路径
private static void download(FTPClient ftpClient, String remoteFile, String localFile) {OutputStream outputStream = null;try {ftpClient.enterLocalPassiveMode();outputStream = Files.newOutputStream(Paths.get(localFile));// ftp默认使用ISO-8859-1编码格式,所以这里需要转换为ISO-8859-1,“解决文件名为中文时,下载后为空文件的问题”String remoteFileName = new String(remoteFile.getBytes("GBK"), StandardCharsets.ISO_8859_1);ftpClient.retrieveFile(remoteFileName, outputStream);} catch (IOException ex) {System.out.println("DownLoad Error: " + ex.getMessage());ex.printStackTrace();} finally {try {if (outputStream != null) {outputStream.close();}ftpClient.disconnect();} catch (IOException ex) {ex.printStackTrace();}}}

注意

在开发过程中遇到了一些问题,各位在用时可能会遇到,在上传时遇到上传失败,我这边是因为文件名是中文的问题
转码一下就好了
remoteFilePath = new String(remoteFilePath.getBytes("GBK"), StandardCharsets.ISO_8859_1);
然后就是下载时发现文件为空文件
还是转码一下就好了
String remoteFileName = new String(remoteFile.getBytes("GBK"), StandardCharsets.ISO_8859_1);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/681798.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从github上复制代码,记录失败过程,最后放弃挣扎直接去github上手动下载了

从github中复制代码出现一下两种报错 1、Failed to connect to github.com port 443: 连接超时 2、Failed to connect to github.com port 443: 拒绝连接 解决办法如下&#xff1a; https://www.ipaddress.com/ github.com的IP地址为140.82.114.3 终端打开hosts文件加入140…

智慧变电站守护者:TSINGSEE青犀AI视频智能管理系统引领行业革新

一、方案概述 随着科技的不断进步&#xff0c;人工智能&#xff08;AI&#xff09;技术已经深入到各个领域。在变电站安全监控领域&#xff0c;引入AI视频监控智能分析系统&#xff0c;可以实现对站内环境、设备状态的实时监控与智能分析&#xff0c;从而提高变电站的安全运行…

找不到msvcr120.dll无法继续执行

windows&#xff08;新安装的系统&#xff09;安装mysql&#xff0c;报错MSVCR120.dll找不到 官方下载地址 https://www.microsoft.com/zh-CN/download/details.aspx?id40784&wd&eqid9eba4d380059694e00000004658ce260 安装上就好了

Linux —— 信号初识

Linux —— 信号初识 什么是信号测试几个信号signal函数函数原型参数说明返回值注意事项示例 后台程序前台转后台检测输入中断向量表 我们今天来继续学习Linux的内容&#xff0c;今天我们要了解的是Linux操作系统中的信号&#xff1a; 什么是信号 信号是操作系统内核与进程之…

Kubernetes的基本概念

目录 一.基本内容 1.定义 2.作用 二.特性 1.弹性伸缩 2.自我修复 3.服务发现和负载均衡 4.自动发布&#xff08;默认滚动发布模式&#xff09;和回滚 5.集中化配置管理和密钥管理 6.存储编排&#xff0c;支持外挂存储并对外挂存储资源进行编排 7.任务批处理运行 三…

二、使用插件一键安装HybirdCLR

预告 本专栏将介绍如何使用这个支持热更的AR开发插件&#xff0c;快速地开发AR应用。 插件简介 通过热更技术实现动态地加载AR场景&#xff0c;简化了AR开发流程&#xff0c;让用户可更多地关注Unity场景内容的制作。 热更方案 基于HybirdCLR HybridCLR是一个特性完整、零成…

100G ZR4 80KM光模块产品亮点有哪些

之前的文章我们介绍了100G ZR4 80KM光模块的产品特征以及技术原理等&#xff0c;那本期文章我们来了解一下易天第二代100G ZR4 80KM光模块的产品亮点。 首先我们通过下面这张表格以最直观的方式来了解第一代和第二代100G ZR4 80KM光模块在工作温度、功耗、FEC纠错等方面有哪些…

Rust Postgres实例

Rust Postgres介绍 Rust Postgres是一个纯Rust实现的PostgreSQL客户端库&#xff0c;无需依赖任何外部二进制文件2。这意味着它可以轻松集成到你的Rust项目中&#xff0c;提供对PostgreSQL的支持。 特点 高性能&#xff1a;Rust Postgres提供了高性能的数据库交互功能&#…

从心理学角度看,GPT 对人有什么影响?

开启个性化AI体验&#xff1a;深入了解GPT的无限可能 导言 GPT 与我们日常生活的融合标志着技术进步的重大飞跃&#xff0c;为提高效率和创新提供了前所未有的机遇。然而&#xff0c;当我们与这些智能系统日益紧密地交织在一起时&#xff0c;探索它们对个人产生的细微的心理影响…

案例研究|硬之城借助DataEase以数据驱动供应链精细化管理

深圳硬之城信息技术有限公司&#xff08;以下简称为“硬之城”&#xff09;成立于2015年&#xff0c;专注电子元件供应链领域&#xff0c;定位于电子产业供应链与智造平台。硬之城通过名为“Allchips”的集成式服务平台&#xff0c;为客户提供一站式的电子元件采购和供应链管理…

SRC上分秘诀+实战挖掘+挖洞技巧+新手上路+详细讲解

SRC马上到来 可能有些好兄弟们还没有头绪 只会做一些靶场 并没有什么实战经验 所以这篇文章给大家分享一下我挖洞2个月的经验分享 适合新手上路 如何找站&#xff1f; 谷歌搜索 谷歌搜索 谷歌搜索 SQL注入XSS所有漏洞 inurl:.php?idxx 公司inurl:.asp?idxx 公司inurl:.jsp?…

Springboot项目使用redis实现session共享

1.安装redis&#xff0c;并配置密码 这里就不针对于redis的安装约配置进行说明了&#xff0c;直接在项目中使用。 2.pom.xml文件中引入需要的maven <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version&g…