springboot以FTP方式上传文件到远程服务器
作者:问题_解决_分享_讨论_最优 发布时间:2022-10-13 06:19:27
标签:spring,boot,ftp,服务器
一、html代码
<div class="layui-form-item">
<label class="layui-form-label">上传附件:</label>
<div class="layui-input-block doc-litpic">
<button type="button" name="avatar" class="layui-btn layui-btn-sm" data-url="/admin/archives/upload.html" id="larry-litpic"><i class="layui-icon"></i>本地上传</button>
<a id="upload-filename-display" style="color: blue" href=""></a>
<div class="larryms-img-view">
</div>
</div>
</div>
二、js代码
upload.render({
accept: 'file',
elem: '#larry-litpic',
url: interface_cms_article_upload,
field: 'fileNames',
done : function (res, index, upload) {
if(res.code != 200){
layer.open({
icon : 2,
skin : "layui-layer-molv",
content : res.msg
});
}else{
layer.open({
icon : 1,
skin : "layui-layer-molv",
content : res.msg
});
$('#upload-filename-display').text(res.filename);
$("input[name='fileId']").val(res.filename);
}
},
error : function (res) {
}
});
三、后台controller:
@RequestMapping(value = "/upload")
@ApiOperation(value = "本地文件上传",notes ="本地文件上传" )
public Map uploadfunction(HttpServletRequest request, HttpServletResponse response){
//创建文件对象并获取请求中的文件对象
MultipartFile file = null;
Map resultData = new HashMap();
try{
MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;
file = mRequest.getFile("fileNames");
//判断上传非空
if(null == file) {
resultData.put("code",0);
resultData.put("msg","上传文件失败");
resultData.put("filename",file.getOriginalFilename());
return resultData;
}
//上传需要导入数据的文件
//用来检测程序运行时间
long startTime=System.currentTimeMillis();
System.out.println("上传的文件名为:"+file.getOriginalFilename());
String fileName = file.getOriginalFilename();
InputStream inputStream = file.getInputStream();
String hostName = uploadUtil.getHostname();
String username = uploadUtil.getUsername();
String password = uploadUtil.getPassword();
String targetPath = uploadUtil.getTargetPath();
String suffix = cmsArticleService.getSuffix(fileName);
fileName = cmsArticleService.upload(hostName,username,password,targetPath,suffix,inputStream);
//计算上传时间
long endTime=System.currentTimeMillis();
String uploadTime = String.valueOf(endTime-startTime);
System.out.println("上传所用时间:"+uploadTime+"ms");
resultData.put("code",200);
resultData.put("msg","上传文件成功");
resultData.put("filename",fileName);
return resultData;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
四、后台service上传至远程服务器
//FTP文件上传
public static String upload(String hostname,String username,String password,
String targetPath,String suffix,InputStream inputStream) throws SocketException, IOException {
//实例化ftpClient
FTPClient ftpClient = new FTPClient();
//设置登陆超时时间,默认是20s
ftpClient.setDataTimeout(12000);
//1.连接服务器
ftpClient.connect(hostname,21);
//2.登录(指定用户名和密码)
boolean b = ftpClient.login(username,password);
if(!b) {
System.out.println("登陸超時");
if (ftpClient.isConnected()) {
// 断开连接
ftpClient.disconnect();
}
}
// 设置字符编码
ftpClient.setControlEncoding("UTF-8");
//基本路径,一定存在
String basePath="/";
String[] pathArray = targetPath.split("/");
for(String path:pathArray){
basePath+=path+"/";
//3.指定目录 返回布尔类型 true表示该目录存在
boolean dirExsists = ftpClient.changeWorkingDirectory(basePath);
//4.如果指定的目录不存在,则创建目录
if(!dirExsists){
//此方式,每次,只能创建一级目录
boolean flag=ftpClient.makeDirectory(basePath);
if (flag){
System.out.println("创建成功!");
}
}
}
//重新指定上传文件的路径
ftpClient.changeWorkingDirectory(targetPath);
//5.设置上传文件的方式
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
//使用uuid,保存文件名唯一性
String uuid= UUID.randomUUID().toString();
/**
* 6.执行上传
* remote 上传服务后,文件的名称
* local 文件输入流
* 上传文件时,如果已经存在同名文件,会被覆盖
*/
boolean uploadFlag = ftpClient.storeFile(uuid+suffix,inputStream);
if(uploadFlag)
System.out.println("上传成功!");
return uuid+suffix;
}
五、获取yml配置的工具类
@Data
@Component
public class UploadUtil {
@Value("${upload.hostname}")
private String hostname;
@Value("${upload.username}")
private String username;
@Value("${upload.password}")
private String password;
@Value("${upload.targetPath}")
private String targetPath;
}
总结
以上所述是小编给大家介绍的springboot以FTP方式上传文件到远程服务器网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://www.jianshu.com/p/d30207c00114


猜你喜欢
- 本文实例讲述了Android开发使用Messenger及Handler进行通信的方法。分享给大家供大家参考,具体如下:1. 客户端servi
- 一、File流概念JAVA中针对文件的读写操作设置了一系列的流,其中主要有FileInputStream,FileOutputStream,
- 一、顺序结构程序的执行和代码的执行顺序有关,如果调整代码的书写顺序, 则执行顺序也发生变化二、分支结构基本语法形式1:if(布尔表达式){
- 简介线段树是一种二叉搜索树,是用来维护区间信息的数据结构。可以在O(logN)的时间复杂度内实现单点修改、区间修改、区间查询(区间求和,求区
- 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10
- 前言现在很多应用都会用到地图,但是我们肯定不想自己的app中还要弄个导航神马的,所以第三方的地图也为我们开辟了一条捷径,直接将数据传输到地图
- 1、什么是 ThreadLocal:ThreadLocal,即线程本地变量,如果你创建了一个变量,那么访问这个变量的每个线程都会有这个变量的
- IDEA 端口占用解决方法后台开发时经常遇到端口占用问题Intellij IDEA端口占用 解决方法:方法1:打开任务管理器,关闭java
- 一、前期工作创建工作空间 二、创建工作包创建完成后,文件夹的格式为:三、准备编译文件和代码3.1 更换编译文件中的内容将上图中的,
- 一致性哈希节点的增加和减少,大部分节点的 Hash一致package consistenthashimport ("hash/cr
- 1. 前言什么是特殊矩阵?C++,一般使用二维数组存储矩阵数据。在实际存储时,会发现矩阵中有许多值相同的数据或有许多零数据,且分布呈现出一定
- 一. 概念简介在开始学习今天的知识之前,有必要先给大家讲解一下与今天内容相关的一些概念,否则可能会让一些小白产生迷惑。1. 日期和时间的区别
- 1. 简介很早就听说了Google的Lifecycle组件,因为项目没有使用过,所以并没有过多的接触。不过最近看到了一篇文章,其中的一条评论
- spring的一大功能是依赖注入 通过把javabean放入spring的ioc容器中进行统一管理过程如图所示最常见的例子是使用xml配置b
- 最近一直在使用邮件发送功能,老是遇到问题,后面才找到,原来并不是程序问题引起的,我吧问题整出来, javax.mail.SendFailed
- 咱们废话不多说进入主题、系统主页展示:用户登录后进行系统首页:主要功能模块如下、分角色管理、超级管理员拥有最高权限、可以进行菜单灵活控制、用
- 项目要求1.初次打开程序时右上角标题栏显示“无连接”,点击旁边的按钮选择“我的好友”,进入配对界面;2.选择好友之后,返回主界面,标题栏会显
- 前言大家都知道在Android WebView使用中,经常需要H5页面和Native页面进行交互,比如在网页上点击分享按钮,调用本地分享接口
- AlarmManager通常用来开发手机闹钟,并且它是一个全局定时器,可在指定时间或指定周期启动其他组件(包括Activity,Servic
- 今天因为工作需要,把以前编写的一个GPS测试程序拿出来重新修改了一下。这个程序说起来有些历史了,是我11年编写的,那时候学了Android开