ftp服务器上传下载共享文件
1 windows下搭建ftp服务器
https://blog.csdn.net/qq_34610293/article/details/79210539
搭建好之后浏览器输入 ftp://ip就可以看见弹出账号密码的输入框。(win10家庭版本是没有在计算机管理中显示用户组的,具体添加方法见:https://www.kafan.cn/edu/68801291.html)
2 原生上传下载的demo
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.3</version>
</dependency>
上传controller类
package com.test.domi.controller; import com.test.domi.common.utils.FtpUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.UUID; @RestController
@RequestMapping("/ftp")
public class FTPController { @PostMapping("/upload")
public Boolean pictureUpload(MultipartFile file) throws Exception {
String newName = UUID.randomUUID().toString();
String oldName = file.getOriginalFilename();
newName = newName + oldName.substring(oldName.lastIndexOf("."));
InputStream inputStream = file.getInputStream();
return FtpUtil.uploadFile("192.168.6.1",21,"testftp",
"testftp999","/home/testftp/images","/2015/01/02",newName,inputStream);
} @GetMapping("/download")
public void pictureDownload(HttpServletResponse response) throws Exception { FtpUtil.udownLoadFile("192.168.6.1",21,"testftp",
"testftp999","/home/testftp/images/2015/01/02","645c4e0a-4c23-4922-994e-84171a61a494.png",response);
} }
工具类
package com.test.domi.common.utils; import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply; import javax.servlet.http.HttpServletResponse;
import java.io.*; public class FtpUtil { public static boolean uploadFile(String host, int port, String username, String password,
String basePath, String filePath, String filename, InputStream input) {
FTPClient ftp = new FTPClient();
Boolean result = false;
try {
// 连接FTP服务器
ftp.connect(host, port);
// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
ftp.login(username, password);// 登录
int reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return result;
}
//切换到上传目录
String path = basePath + filePath;
if (!ftp.changeWorkingDirectory(path)) {
//如果目录不存在则创建目录
String[] dirs = path.split("/");
StringBuffer tempPath = new StringBuffer();
for (String dir : dirs) {
if (null == dir || "".equals(dir)) {
continue;
}
tempPath.append("/").append(dir);
if (!ftp.changeWorkingDirectory(tempPath.toString())) {
if (!ftp.makeDirectory(tempPath.toString())) {
return result;
} else {
ftp.changeWorkingDirectory(tempPath.toString());
}
}
}
}
//设置上传文件为二进制类型
ftp.setFileType(FTP.BINARY_FILE_TYPE);
//上传文件默认是10M大小
//客户端编码等基本设置
//FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_UNIX);设置unix下下载大小的限制
if (!ftp.storeFile(filename, input)) {
return result;
}
input.close();
ftp.logout();
result = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return result;
} public static void udownLoadFile(String host, int port, String username, String password,
String remotePath,String fileName, HttpServletResponse response) { FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(host, port);
// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
ftp.login(username, password);// 登录
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return;
}
ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
FTPFile[] fs = ftp.listFiles();
for (FTPFile ff : fs) {
String name = ff.getName();
if (name.equals(fileName)) {
response.setContentType("application/form-data");
String realFileName = "我的重命名" + name.substring(name.lastIndexOf("."));
//"inline; filename=\""
//+ URLEncoder.encode(title, "UTF-8")
//+ ".txt\"");
response.setHeader("Content-disposition",
"attachment; filename=" + new String(realFileName.getBytes("utf-8"), "ISO8859-1"));
response.setCharacterEncoding("utf-8");
ftp.retrieveFile(ff.getName(), response.getOutputStream());
}
}
ftp.logout(); } catch (Exception e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) { }
} } }
}
3 springboot整合spring Camel 读取ftp文件
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-boot-starter</artifactId>
<version>2.19.1</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-bindy</artifactId>
<version>2.19.1</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-ftp-starter</artifactId>
<version>2.19.1</version>
</dependency>
配置文件

待办:
附件FTP服务器,下载的附件不显示设置的名字和后缀,只能重命名后缀才能打开,
对ftp客户端的工具类封装,建立表结构关系,维护fileId与原文件名,存放位置之间的关系,
上传失败时候,在catch中删除文件
ftp服务器上传下载共享文件的更多相关文章
- Spring学习---Spring中利用组件实现从FTP服务器上传/下载文件
FtpUtil.java import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcepti ...
- 使用批处理文件在FTP服务器 上传下载文件
1.从ftp服务器根目录文件夹下的文件到指定的文件夹下 格式:ftp -s:[配置文件] [ftp地址] 如:ftp -s:c:\vc\ftpconfig.txt 192.168.1.1 建立一个 ...
- FTP服务器上传,下载文件
public class FtpUtil { /** * * @param host FTP服务器地址 * @param port FTP服务器端口 * @param username FTP登录账号 ...
- 使用ftp软件上传下载php文件时换行丢失bug
正 文: 在使用ftp软件上传下载php源文件时,我们偶尔会发现在本地windows下notepad++编辑器写好的php文件,在使用ftp上传到linux服务器后,php文件的换行符全部丢失了, ...
- Linux 终端访问 FTP 及 上传下载 文件
今天同事问我一个问题,在Linux 下访问FTP,并将文件上传上去. 我之前一直是用WinSCP工具的. 先将文件从linux copy到windows下,然后在传到ftp上.google 一下. 方 ...
- Linux 终端访问 FTP 及 上传下载 文件[转]
1. Linux 终端连接FTP [oracle@Dave ~]$ ftp 10.85.7.97 Connected to 10.85.7.97. 220 Serv-U FTP Server ...
- 使用ftp软件上传下载php文件时换行丢失bug(全部变为一行)
文章来源:http://www.piaoyi.org/computer/ftp-php-r-n-bug.html 正 文: 在使用ftp软件上传下载php源文件时,我们偶尔会发现在本地windows下 ...
- Python 基于Python实现Ftp文件上传,下载
基于Python实现Ftp文件上传,下载 by:授客 QQ:1033553122 测试环境: Ftp客户端:Windows平台 Ftp服务器:Linux平台 Python版本:Python 2.7 ...
- linux下常用FTP命令 上传下载文件【转】
1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密码 ...
随机推荐
- 03.从尾到头打印链表 (Java)
题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 思路 采用递归: 若当前节点不为空,则递归其后继节点,并将当前节点加入list中. 采用数据结构栈实现: 利用栈“后进先出” ...
- IntelliJ IDEA工具增加test测试方法,报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing错误
是因为我在IntelliJ IDEA中,通过plugins增加 插件的时候,在 增加的测试类是junit4.12,改版本的jar包不再包含hamcrest-library.jar .我是通过将自己的项 ...
- js版的虚线框
要求:实现鼠标点击面板的一个点,拖动到固定的位置,出现虚线框 样图: 具体的代码实现: js文件 <script> window.onload = function(){ docu ...
- 五、Jmeter中提取JSON响应中数组的长度
json响应如下: { "code":0, "data":{ "data":[ { "amount":50000, &q ...
- 自定义组合控件SettingItemView的简单实现
package com.loaderman.settingitemviewdemo; import android.os.Bundle; import android.support.v7.app.A ...
- Django之模型的高级用法
from django.db import models class Publisher(models.Model): name = models.CharField(max_length=30) a ...
- mongodb将mysql数据导入
1.首先将数据从mysql数据库导出为xls文件 SELECT * FROM user INTO OUTFILE "F:\1.xls" 2.notepad++打开,用utf8编码保 ...
- 有效使用Django的QuerySets
对象关系映射 (ORM) 使得与SQL数据库交互更为简单,不过也被认为效率不高,比原始的SQL要慢. 要有效的使用ORM,意味着需要多少要明白它是如何查询数据库的.本文我将重点介绍如何有效使用 Dja ...
- Session中的方法概述
一.操作实体对象 delete()把持久化或游离转为删除状态 save()把临时状态变为持久化状态(交给Sessioin管理) saveOrUpdate()把临时或游离状态转为持久化状态 update ...
- C# 反转单向链表
static void Main(string[] args) { Mynode mynode0 = new Mynode(); Mynode mynode1 = new Mynode(); Myno ...