将文件上传至ftp服务器,FTP文件上传工具类,将文件上传至服务器指定目录
将文件上传至ftp服务器,传入File对象,将文件上传至ftp服务器
需要配置修改的点:
1. 服务器ip端口(服务器ip 端口22/21)。
2. 服务器账号密码(服务器登录用户名密码)。
3. 上传路径(写入的路径会去检查是否存在,若存在则在路径下继续深入,不存在则创建)。
4. 下面的注释很全面很清楚,如遇问题,可留言。
@Slf4j
@Component
public class FtpUtils {/*** @param 文件* @return*/public String ftpUpload(File file){FTPClient ftp = new FTPClient();String uploadPath ="";//文件上传的路径String state = "";//文件上传状态try {//配置表中取出ftp服务器所在的ip和服务的端口String ip = "192.168.11.111";//ftp服务器的ipint port = 21;//ftp服务器的端口/*** 这里修改存放路径*/uploadPath ="aaa/bbb/ccc/";//文件存放的路径名ftp.connect(ip, port);//连接ftp服务器ftp.login("userName", "passWord");//登录
// ftp.connect("432.8.129.66",21);
// ftp.login("ubuntu","root");//检验是否连接成功int reply = ftp.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {log.info("连接失败");return "99999";}uploadPath = uploadPath;//更改文件保存的目录
// ftp.changeWorkingDirectory("/");//判断文件夹 创建文件夹this.createDir(uploadPath,ftp);// ftp.makeDirectory(uploadPath);log.info("文件上传的路径:ftp服务器根目录"+uploadPath+file.getName());FileInputStream is = new FileInputStream(file);//以第一个参数作为文件名,ftp.enterLocalPassiveMode();ftp.setControlEncoding("UTF-8");if(ftp.storeFile(new String(file.getName().getBytes("UTF-8")), is)){log.info("上传成功");state = "0000";}else{log.info("上传失败");state = "9999";}ftp.logout();is.close();} catch (SocketException e) {// connec报的e.printStackTrace();log.info("服务器连接异常!!");}catch (IOException e) {// connec报的连接异常e.printStackTrace();log.info("文件服务器连接异常!!");}finally{//关闭ftp连接if(ftp.isConnected()){try {ftp.disconnect();} catch (IOException e) {e.printStackTrace();}}}//返回上传状态return state;}public void createDir(String remote,FTPClient ftpClient)throws UnsupportedEncodingException,IOException{//将传进来的remote前面的目录路径拿出来String directory = remote.substring(0, remote.lastIndexOf("/") + 1);if (!directory.equalsIgnoreCase("/") && !ftpClient.changeWorkingDirectory(new String(directory.getBytes("GBK"), "iso-8859-1"))) {// 如果远程目录不存在,则递归创建远程服务器目录int start = 0;int end = 0;//地址开头为/ start=1if (directory.startsWith("/")) {start = 1;} else {start = 0;}end = directory.indexOf("/", start);while (true) {String subDirectory = new String(remote.substring(start, end).getBytes("GBK"),"iso-8859-1");if (!ftpClient.changeWorkingDirectory(subDirectory)) {if (ftpClient.makeDirectory(subDirectory)) {ftpClient.changeWorkingDirectory(subDirectory);} else {System.out.println("创建目录失败");}}start = end + 1;end = directory.indexOf("/", start);// 检查所有目录是否创建完毕if (end <= start) {break;}}}}}
相关文章:

苹果设备iphone,ipad,macbook网络连接慢,开机开什么卡什么,一步解决
苹果电脑网络连接慢,开机开什么卡什么??? 网络上的方法一种种,没有一个适用的? 如果你的macbook也是打开就没网,但有一些软件也能用,就是浏览器加载跑条儿,不妨试试&am…

Map的分类和不同的应用场景
java为数据结构中的映射定义了一个接口java.util.Map; 它有四个实现类,分别是HashMap,Hashtable,LinkedHashMap和TreeMap 可能很多人只使用过HashMap,但还是那句话,你可以不用,但你不能不懂。如果你也是这样࿰…

sql特殊字符转义,oracle中将字符 ‘ 转义
oracle中使用sql语句或多或少地会遇到使用特殊字符,比如" ’ ",这时,这个单引号就会与前面的单引号匹配,将文本从中间断开,引发问题和错误。这就需要我们进行转义。 而oracle中并不像C java这些编程语言那样使用"…

idea中如何打开RunDashboard窗口,微服务最实用设置
idea中如何打开RunDashboard窗口 找到.idea目录,打开workspace.xml,搜索RunDashboard,找到该段配置,加入下面注释中的代码 <component name"RunDashboard"><option name"ruleStates"><list&…

在js中使用HashMap数据结构,在js中使用K,V数据结构
首先是定义一个HashMap方法,做基类(复制在js中即可,然后引用) //简单的哈希表,begin function HashMap() {/** Map 大小 * */var size 0;/** 对象 * */var entry new Object();/** 存 * */this.put function(key, value) {if (!this.containsKey(key…

查看Hotspot源码,查看java各个版本源码的网站,如何查看jdk源码
java开发必知必会之看源码,而看源码的第一步则是找到源码👇 jdk源码网站:http://hg.openjdk.java.net/ 进入这个网站后并不是源码摆在面前,根据下面以jdk8为例,学会如何查看各个版本内容的jdk源码。 这里我们举例的是…

快起床刷题去,别人把你offer拿走啦
好久没有上力扣刷题咯,又到了关键的时刻,却忘得零零散散,囧~ 话说,刷题、学算法、常用,这些技能才能长在身上! 上一道刚刚遇到的正菜~ 题:给定一个整数数组 nums 和一个目标值 k,请实现一个方…

oracle 提示:ORA-02292:integrity constraint(xxxxxxx) violated - child record found
当我们删除 数据的时候 oracle 提示:ORA-02292:integrity constraint(xxxxxxx) violated - child record found 这种情况呢是因为外键关联的存在,需删除另一个表的信息后才能将该信息删除。 这种情况首先应该去寻找是否有表与当前表存在关联,若能找到最…

分割数组(将数组三等分)
简单面试题——分割数组 时间复杂度O(n) //输入:一个自然数数组,选取其中2个数字num[i], num[j], 把数组三分, // 每一部分的累加和(不包括分割点的数字)相等。 // 例:nums[] [2,1,3,1,1,1,5,3]&am…

svn和git的本质区别是什么
上边图中,跨越了区的箭头,它中间的区数据都会同步。例如:git checkout ,它是将本地仓库数据更新到暂存区和工作区的。

使用JavaScript实现复杂功能:一个完整的电商网站搜索功能
随着互联网的发展,电子商务网站已经成为人们购物的重要平台。而在这些网站中,搜索功能无疑是核心功能之一。用户可以通过搜索快速找到他们需要的商品,从而提高购物体验。本文将详细介绍如何使用JavaScript实现一个完整的电商网站搜索功能。

牛年前的一小结——打响本命年的第一枪,继续刷题!
经过一段时间的小尝试,摸索出了一点点头儿吧。 总结一下子。 关于面试的java,像我这个经验层次(1-2year普通厂)的都不会太难。最多超不出力扣中等难度。 多练习链表、树、指针类的比较基础的题目;有解题方法并不是最重…

力扣1002.查找常用字符
力扣 1002. 查找常用字符 本人力扣练习已上传至码云,可互相学习借鉴。 难度-简单 题目: 给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,…

springboot项目使用junit4进行单元测试,maven项目使用junit4进行单元测试
首先,maven项目中引入依赖 <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope> </dependency><dependency><groupId>org.…

springboot设置文件上传大小(tomcat默认1M)
application.yml # 设置文件上传大小(tomcat默认1M) server:tomcat:max-http-form-post-size: -1 spring:servlet:multipart:max-file-size: 100MBmax-request-size: 500MB

kotlin重写构造方法编译报错:Primary constructor call expected
在kotlin中使用construct关键字定义构造方法,如果类定义时已经有构造方法(类名后带括号),需要添加构造方法时,需要使用以下写法: class User(var name,var age){//使用 :this() 调用主构造方法对参数赋默认…

Linux下创建硬链接,文件访问为空,提示:xxxx: 符号连接的层数过多
Linux下创建软链接|硬链接,文件访问为空,提示:x x x: 符号连接的层数过多。 原因:创建符号链接的时候未使用绝对路径,无论是源文件路径还是目标路径,都需要使用绝对路径。 如: ln …

kotlin Bean加载失败lateinit property has not been initialized
Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘xxxApplicationConfig’: Unsatisfied dependency expressed through field ‘appConfigService’; nested exception is org.springframework.be…

Gradle错误提示:Java home supplied via ‘xxx.xxx.xxx‘ is invalid
Gradle错误提示:Java home supplied via ‘org.gradle.java.home’ is invalid 描述:在使用idea采用gradle进行依赖的管理功能,当想切换java版本时(卸载现在的java版本,如jdk15,安装另外的java版本…

恭喜你发现了宝藏,编程习惯-日积月累
总结: 条件查询可在数据库层创建queryDto进行统一操作。 代码复用:若有代码重复出现了三次,很大概率可以重构。(三则重构) dto和entity中的赋值操作,可以写成方法放在dto中。(充血模型&#x…

Gradle 将项目publish到Nexus,Kotlin将项目发布到nexus,springboot项目发布到maven仓库
示例见:Gitte 公仓设置 在项目中添加maven-publish的插件 plugins {kotlin("jvm") version "1.3.72"kotlin("plugin.spring") version "1.3.72"java-librarymaven-publishmaven }如同maven项目一样设置组、版本信息 gr…

妙用postman系列——postman建组、分享
妙用postman系列——postman建组、分享 添加新的组和请求。 3、生成分享链接 4、导入分享链接

Postman使用Date数据类型,Postman发送Date类型数据,Postman模拟前端调用
Postman使用Date数据类型: 在form-data数据类型下,使用 2021/7/7 11:11:00 (yyyy/MM/dd HH:mm:ss) 的数据格式即可 如下: 在json数据格式中,这种的则不能适用,需要在Per-request Script中设置…

IDEA中将代码块封装为方法,IDEA代码重构快捷键
IDEA中将代码块封装为方法 选中要转换的代码块,快捷键: Windows快捷键:Alt Shift M Mac快捷键:Alt Command M 如图:

Kotlin协程使用,协程使用注意事项,协程中的await方法使用|不使用suspend使用协程
参见 码云 协程使用方法一 (Dispatchers调度器模式) 指定不同线程。同线程会挂起并阻塞(挂起是不影响主线程执行,阻塞是同样的IO线程会阻塞) withContext(Dispatchers.IO) { // 👈 切换到 IO 线程&…

Alibaba Cloud Linux 2.1903 LTS 64位服务器yum源下载404,Alibaba Cloud Linux 2实例中使用docker-ce、epel等YUM源安装软件失败
[Alibaba Cloud Linux 2.1903 LTS 64位]服务器yum源下载404 failure: repodata/repomd.xml from docker-ce-stable: [Errno 256] No more mirrors to try. https://download.docker.com/linux/centos/2.1903/x86_64/stable/repodata/repomd.xml: [Errno 14] HTTPS Error 404 -…

OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3
OpenAPI使用(swagger3) demo见Gitte 一、背景及名词解释 OpenAPI是规范的正式名称。规范的开发工作于2015年启动,当时SmartBear(负责Swagger工具开发的公司)将Swagger 2.0规范捐赠给了Open API Initiative࿰…

linux环境下nacos的安装+启动,阿里云服务器安装nacos
nacos安装启动(linux环境): 基础:安装java环境 官网下载压缩包:如 nacos-server-1.2.1.tar.gz 放在自定义目录下 # 解压 tar -xvf nacos-server-1.2.1.tar.gz进入bin目录 cd nacos/bin # 启动 sh startup.sh -m sta…

SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos
SpringBoot项目使用nacos kotlin demo见Gitte 一、引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错。 maven版本 <dependency><groupId>com.alibaba.cloud</groupId><artifact…

使用第三方SDK(如微信、qq、快看、头条等),调用接口405 Method Not Allowed
使用第三方SDK(如微信、qq、快看、头条等),调用接口405 Method Not Allowed 错误描述:postman请求正常,但客户端调用后接口没有反应,但返回了405错误。 解决方法:第三方sdk调用接口需要使用http…