接入ftps上传文件

article/2025/6/6 3:26:03

ftps = ftp + ssl
sftp = ssh + scp,这个不适合大模式的文件传输

领导表达有误,实际上是希望把ftp改为ftps

一、FTPS服务器配置

  1. 先确认是否已经安装了vsftpd。没有的话则安装一下
yum install vsftpd
systemctl enable vsftpd
systemctl restart vsftpd
  1. 创建私钥、证书
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd_ssl_key.pem -out /etc/vsftpd/vsftpd_ssl_cert.pem
  1. 添加配置到vsftpd.conf文件中
ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_ciphers=HIGH:AES256-SHA:!aNULL
rsa_cert_file=/etc/vsftpd/vsftpd_ssl_cert.pem
rsa_private_key_file=/etc/vsftpd/vsftpd_ssl_key.pem
require_ssl_reuse=NO
  1. 重启ftp服务
systemctl restart vsftpd

二、FTPS工具类

  1. 加入依赖
        <dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.11.0</version></dependency>
  1. 工具类
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPSClient;import java.io.File;
import java.io.FileInputStream;public class FtpsUtil {/*** 打开FTP连接** @param hostname hostname* @param port     port* @param username username* @param password password*/public static FTPSClient openFTP(String hostname, int port, String username, String password) {// 显示方式传false,隐式方式传trueFTPSClient ftpsClient = new FTPSClient(false);ftpsClient.setControlEncoding("UTF-8");try {ftpsClient.connect(hostname, port);boolean flag = ftpsClient.login(username, password);// 切换到被动模式ftpsClient.setControlEncoding("UTF-8");ftpsClient.setFileType(FTPClient.BINARY_FILE_TYPE);ftpsClient.enterLocalPassiveMode();ftpsClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);ftpsClient.execPROT("P");ftpsClient.setAuthValue("TLS");if (!flag) {System.out.println("login failed");return null;}System.out.println("ftpsClient connect");String path = ftpsClient.printWorkingDirectory();System.out.println("path:" + path);} catch (Exception e) {e.printStackTrace();}return ftpsClient;}/*** 关闭FTP连接** @param ftpsClient ftp客户端*/public static void closeFTP(FTPSClient ftpsClient) {try {ftpsClient.logout();ftpsClient.disconnect();} catch (Exception e) {e.printStackTrace();}}/*** 创建多层目录文件,如果有ftp服务器已存在该文件,则不创建,如果无,则创建** @param remote     目录* @param ftpsClient ftp客户端*/public static boolean createDirectory(String remote, FTPSClient ftpsClient) {String directory = remote;try {if (!remote.endsWith("/")) {directory = directory + "/";}// 如果远程目录不存在,则递归创建远程服务器目录if (!directory.equals("/") && !ftpsClient.changeWorkingDirectory(directory)) {int start = 0;int end = 0;if (directory.startsWith("/")) {start = 1;} else {start = 0;}end = directory.indexOf("/", start);String paths = "", path = "";while (true) {String subDirectory = remote.substring(start, end);path = path + "/" + subDirectory;// 目录不存在就创建if (!ftpsClient.changeWorkingDirectory(subDirectory)) {if (ftpsClient.makeDirectory(subDirectory)) {ftpsClient.changeWorkingDirectory(subDirectory);}}paths = paths + "/" + subDirectory;start = end + 1;end = directory.indexOf("/", start);// 检查所有目录是否创建完毕if (end <= start) {break;}}}return true;} catch (Exception e) {e.printStackTrace();}return false;}/*** 创建多层目录文件,如果有ftp服务器已存在该文件,则不创建,如果无,则创建** @param filePath   上传文件本地路径* @param ftpPath    上传文件FTP路径* @param ftpsClient ftp客户端*/public static void uploadFileToFTP(String filePath, String ftpPath, FTPSClient ftpsClient) {try {File file = new File(filePath);boolean changeFlag = ftpsClient.changeWorkingDirectory(ftpPath);System.out.println("changeFlag:" + changeFlag);if (!changeFlag) {boolean createFlag = createDirectory(ftpPath, ftpsClient);System.out.println("createFlag:" + createFlag);}String uploadPath = ftpsClient.printWorkingDirectory();System.out.println("uploadPath:" + uploadPath);ftpsClient.setFileType(FTPClient.BINARY_FILE_TYPE);boolean uploadFlag = ftpsClient.storeUniqueFile(file.getName(), new FileInputStream(file));System.out.println("uploadFlag:" + uploadFlag);System.out.println("uploadFlag:" + ftpsClient.getReplyString());} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {// 打开ftp连接FTPSClient ftpsClient = openFTP("192.168.0.1", 21, "ftpuser", "97joiuewr@!s");if (null == ftpsClient) {return;}// 上传文件uploadFileToFTP("D:/test.txt", "/home/ftpuser", ftpsClient);// 关闭ftp连接closeFTP(ftpsClient);}}

http://www.hkcw.cn/article/PhTvYFEDLN.shtml

相关文章

安全-JAVA开发-第一天

目标&#xff1a; 安装环境 了解基础架构 了解代码执行顺序 与数据库进行连接 准备&#xff1a; 安装 下载IDEA并下载tomcat&#xff08;后续出教程&#xff09; 之后新建项目 注意点如下 1.应用程序服务器选择Web开发 2.新建Tomcat的服务器配置文件 并使用 Hello…

Spring @Autowired自动装配的实现机制

Spring Autowired自动装配的实现机制 Autowired 注解实现原理详解一、Autowired 注解定义二、Qualifier 注解辅助指定 Bean 名称三、BeanFactory&#xff1a;按类型获取 Bean四、注入逻辑实现五、小结 源码见&#xff1a;mini-spring Autowired 注解实现原理详解 Autowired 的…

【AI News | 20250603】每日AI进展

AI Repos 1、dgm 是一个创新的自改进系统&#xff0c;通过迭代修改自身代码并利用编码基准验证每次更改&#xff0c;实现开放式进化。该系统旨在提升 AI 代理的代码修改能力。DGM 支持 OpenAI 和 Anthropic API&#xff0c;依赖 Docker 环境&#xff0c;并集成了 SWE-bench 和…

Rust 学习笔记:Cargo 工作区

Rust 学习笔记&#xff1a;Cargo 工作区 Rust 学习笔记&#xff1a;Cargo 工作区创建工作区在工作区中创建第二个包依赖于工作区中的外部包向工作区添加测试将工作区中的 crate 发布到 crates.io添加 add_two crate 到工作区总结 Rust 学习笔记&#xff1a;Cargo 工作区 随着项…

操作系统 第 39 章 插叙:文件和目录

两项关键操作系统技术的发展&#xff1a;进程&#xff0c;虚拟化的 CPU&#xff1b;地址空间&#xff0c;虚拟化的内存。 这一部分加上虚拟化拼图中最关键的一块&#xff1a;持久存储。永久存储设备永久地&#xff08;或至少长时间地&#xff09;存储信息&#xff0c;如传统硬盘…

楼宇自控系统联动暖通空调:解密建筑环境舒适度提升路径

走进现代建筑&#xff0c;无论是办公场所、商业中心&#xff0c;还是医院、酒店&#xff0c;人们对环境舒适度的要求越来越高。暖通空调作为调节建筑室内环境的关键设备&#xff0c;其运行效果直接影响着人们的体验。然而&#xff0c;传统暖通空调独立运行、调控不灵活等问题&a…

Freemarker快速入门

Freemarker概述 FreeMarker 是一款 模板引擎&#xff1a; 即一种基于模板和要改变的数据&#xff0c; 并用来生成输出文本(HTML网页&#xff0c;电子邮件&#xff0c;配置文件&#xff0c;源代码等)的通用工具。 它不是面向最终用户的&#xff0c;而是一个Java类库&#xff0c…

黑盒(功能)测试基本方法

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、黑盒测试的概念 1、什么是黑盒测试 &#xff08;1&#xff09;黑盒测试又称功能测试、数据驱动测试或基于规格说明书的测试&#xff0c;是一种从用户观点出…

[java八股文][JavaSpring面试篇]SpringCloud

了解SpringCloud吗&#xff0c;说一下他和SpringBoot的区别 Spring Boot是用于构建单个Spring应用的框架&#xff0c;而Spring Cloud则是用于构建分布式系统中的微服务架构的工具&#xff0c;Spring Cloud提供了服务注册与发现、负载均衡、断路器、网关等功能。 两者可以结合…

chromedriver 下载失败

问题描述 chromedriver 2.46.0 下载失败 淘宝https://registry.npmmirror.com/chromedriver/2.46/chromedriver_win32.zip无法下载 解决方法 找到可下载源 https://cdn.npmmirror.com/binaries/chromedriver/2.46/chromedriver_win32.zip &#xff0c;先将其下载到本地目录(D…

74. 搜索二维矩阵 (力扣)

给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。…

CppCon 2014 学习:Rolling Your Own Circuit Simulator

这段话讲述了一个背景和动机&#xff0c;目的是阐明为什么开源C库变得越来越复杂且在科学和工程领域有很大的应用潜力。 关键点&#xff1a; 开源库的成熟&#xff1a; 近年来&#xff0c;开源C库在许多科学和工程领域变得越来越成熟和强大。这些库不再仅仅是简单的工具&…

无人机自主降落论文解析

Dynamic Landing of an Autonomous Quadrotor on a Moving Platform in Turbulent Wind Conditions 滑膜控制器 这一部分详细介绍了边界层滑模控制器&#xff08;Boundary Layer Sliding Controller&#xff0c;BLSC&#xff09;的设计和实现&#xff0c;特别是如何将其应用于…

.NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想

在当今数据驱动的时代&#xff0c;向量数据库&#xff08;Vector Database&#xff09;作为一种新兴的数据库技术&#xff0c;正逐渐成为软件开发领域的重要组成部分。特别是在 .NET 生态系统中&#xff0c;向量数据库的应用为开发者提供了构建智能、高效应用程序的新途径。 一…

html基础01:前端基础知识学习

html基础01&#xff1a;前端基础知识学习 1.个人建立打造 -- 之前知识的小总结1.1个人简历展示1.2简历信息填写页面 1.个人建立打造 – 之前知识的小总结 1.1个人简历展示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8&qu…

CentOS Stream 8 Unit network.service not found

一、问题现象 在 CentOS Stream 8 操作系统中&#xff0c;配置完静态IP 信息&#xff0c;想重启网络服务。 执行如下命令&#xff1a; systemctl restart network 提示信息如下&#xff1a; Failed to restart network.service: Unit network.service not found. 二、问题…

【Axure高保真原型】交通事故大屏可视化分析案例

今天和大家分享交通事故大屏可视化分析案例的原型模板&#xff0c;包括饼图分类分析、动态显示发生数、柱状图趋势分析、中部地图展示最新事故发现地点和其他信息、右侧列表记录发生事故的信息…… 通过多种可视化图表展示分析结果&#xff0c;具体效果可以点击下方视频观看或…

网络安全-等级保护(等保) 3-3-1 GB/T 36627-2018 附录A (资料性附录) 测评后活动、附 录 B (资料性附录)渗透测试的有关概念说明

################################################################################ GB/T 36627-2018 《信息安全技术 网络安全等级保护测试评估技术指南》对网络安全等级保护测评中的相关测评技术进行明确的分类和定义,系统地归纳并阐述测评的技术方法,概述技术性安全测试和…

wsl===windows下安装Linux系统

新近版本的windows都支持了Linux&#xff0c;操作如下&#xff1a; 控制面板中启用对应的功能 2. 打开powershell&#xff0c;以安装Ubuntu为例&#xff0c;然后执行 PS C:\Users\steven.wang> wsl.exe --update 正在安装: 适用于 Linux 的 Windows 子系统 已安装 适用于 …

云上展厅颠覆传统展览

云上展厅&#xff1a;重塑展览行业的新篇章 随着数字化技术的迅猛发展&#xff0c;传统展览模式正经历一场深刻的变革。云上展厅&#xff0c;新兴的展览形式&#xff0c;正逐步颠覆传统的实体展览模式&#xff0c;凭借其跨越时空限制、多样化展示方式、丰富互动体验及高效商业…