热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Ftp实现上传文件至远程服务器,Java工作经验6年

commons-netcommons-net3.32.Ftp工具类importcom.turing.JavaBean.FtpInformation;importorg.a

commons-net

commons-net

3.3

2.Ftp工具类

import com.turing.JavaBean.FtpInformation;

import org.apache.commons.net.ftp.FTPClient;

import org.apache.commons.net.ftp.FTPReply;

import org.springframework.stereotype.Component;

import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

import java.io.InputStream;

import java.util.UUID;

/**

  • @Author: 又蠢又笨的懒羊羊程序猿

  • @CreateTime: 2021年07月22日 12:39:47

*/

@Component //这就是我们刚才加入的依赖

public class FtpUtil {

/**

  • ftp服务器ip地址

*/

private static final String FTP_ADDRESS = “39.103.203.27”;

/**

  • 端口号

*/

private static final int FTP_PORT = 21;

/**

  • 用户名

*/

private static String FTP_USERNAME;

/**

  • 密码

*/

private static String FTP_PASSWORD;

/**

  • 路径都是/home/加上用户名

*/

private static String FTP_BASEPATH = “/home/”;

/**

  • 参数传过来了文件和文件的输入流

  • @param file

  • @return

  • @throws Exception

*/

public static String uploadFile(FtpInformation ftpInformation,MultipartFile file)throws Exception {

FTP_USERNAME = ftpInformation.getFTP_USERNAME();

FTP_PASSWORD = ftpInformation.getFTP_PASSWORD();

if ("/home/".equals(FTP_BASEPATH))

{

FTP_BASEPATH = FTP_BASEPATH+FTP_USERNAME+"/";

}

//获取上传的文件流

InputStream inputStream = file.getInputStream();

//获取上传的文件名

String filename = file.getOriginalFilename();

//获取文件后缀

String suffix = filename.substring(filename.lastIndexOf("."));

//使用UUID拼接后缀,定义一个不重复的文件名

String finalName = UUID.randomUUID() + suffix;

//这是最开始引入的依赖里的方法

FTPClient ftp = new FTPClient();

ftp.setControlEncoding(“utf-8”);

try {

int reply;

// 连接FTP服务器

ftp.connect(FTP_ADDRESS, FTP_PORT);

// 登录

ftp.login(FTP_USERNAME, FTP_PASSWORD);

//连接成功会的到一个返回状态码

reply = ftp.getReplyCode();

//可以输出看一下是否连接成功

System.out.println(reply);

//设置文件类型

ftp.setFileType(FTPClient.BINARY_FILE_TYPE);

//修改操作空间

ftp.changeWorkingDirectory(FTP_BASEPATH);

//对了这里说明一下你所操作的文件夹必须要有可读权限,chomd 777 文件夹名//这里我就是用的我的home文件夹

//这里开始上传文件

ftp.storeFile(finalName, inputStream);

if (!FTPReply.isPositiveCompletion(reply)) {

ftp.disconnect();

System.out.println(“连接失败”);

return null;

}

System.out.println(“连接成功!”);

inputStream.close();

ftp.logout();

return FTP_BASEPATH+finalName;

} catch (Exception e) {

e.printStackTrace();

System.out.println(“ERROR:”+e.getMessage());

} finally {

if (ftp.isConnected()) {

try {

ftp.disconnect();

} catch (IOException ioe) {

}

}

}

return null;

}

}

import lombok.AllArgsConstructor;

import lombok.Data;

/**

  • @Author: 又蠢又笨的懒羊羊程序猿

  • @CreateTime: 2021年07月24日 13:07:19

*/

@Data

@AllArgsConstructor

public class FtpInformation

{

private String FTP_USERNAME;

private String FTP_PASSWORD;

}

//记住添加请求头,否则无法接收文件

@PostMapping(value = “/uploadFile”, headers = “content-type=multipart/form-data”)

@ResponseBody

@ApiOperation("上传

【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】浏览器打开:qq.cn.hn/FTf 免费领取

文件")

public ResponseBean uploadFile(FtpInformation ftpInformation, @RequestParam(“files”) MultipartFile[] files)

{

List list &#61; new ArrayList<>();

for (MultipartFile file : files) {

try {

//调用自定义的FTP工具类上传文件

String finalName &#61; FtpUtil.uploadFile(ftpInformation,file);

if (StringUtils.isEmpty(finalName))

{

throw new Exception(“Upload Error”);

}

list.add(finalName);

} catch (Exception e) {

log.error(“ERROR:{}”,e.getMessage());

return new ResponseBean(HttpStatusCode.INTERNAL_SERVER_ERROR,null);

}

}

return new ResponseBean(HttpStatusCode.Success,list);

}



推荐阅读
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 标题: ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • 设计模式——模板方法模式的应用和优缺点
    本文介绍了设计模式中的模板方法模式,包括其定义、应用、优点、缺点和使用场景。模板方法模式是一种基于继承的代码复用技术,通过将复杂流程的实现步骤封装在基本方法中,并在抽象父类中定义模板方法的执行次序,子类可以覆盖某些步骤,实现相同的算法框架的不同功能。该模式在软件开发中具有广泛的应用价值。 ... [详细]
author-avatar
翻版的袁城
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有