项目背景:本菜鸡最近用SSM框架zuo的项目的后台管理系统,后台管理的业务会涉及视频和图片上传保存到专门的视频和图片服务器.
同时要从视频和图片服务器获取文件流传给前端显示,采用ftp来实现,所以采用了FtpClient.
首先是依赖jar包,用的较为新的版本
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.6</version>
</dependency>
使用了三种上传文件的方式,
1.uploadFile(String pathname, String fileName, MultipartFile file);
参数:ftp路径,保存名,MultipartFile(因为前端上传的是这个类型);
2.uploadFile(String pathname, String fileName, String originfilename);
参数:ftp路径,保存名,本地文件绝对路径
3.uploadFile(String pathname, String fileName, InputStream inputStream,Long beginSize) ;
参数:ftp路径,保存名,输入流(MultipartFile.getInputStrem获得),文件开始传递的大小;(用于断点续传)
同时还提供了文件下载,删除,获取文件大小和查询文件是否存在的功能.
话不多说 直接上 FtpUtils.java工具类,借鉴了大神的代码,修改而成,感谢大佬们对小白的帮助.
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.springframework.web.multipart.MultipartFile;
public class FtpUtils {
// ftp服务器地址
public String hostname = "192.168.1.*";
// ftp服务器端口号默认为21
public Integer port = 21;
// ftp登录账号
public String username = "user";
// ftp登录密码
public String password = "password";
public FTPClient ftpClient = null;
private static final int BUFFER_SIZE = 1024000;
/**
* 65 初始化ftp服务器
*/
public void initFtpClient() {
ftpClient = new FTPClient();
ftpClient.setControlEncoding("utf-8");
try {
System.out.println("connecting...ftp服务器:" + this.hostname + ":" + this.port);
ftpClient.connect(hostname, port); // 连接ftp服务器
ftpClient.login(username, password); // 登录ftp服务器
int replyCode = ftpClient.getReplyCode(); // 是否成功登录服务器
if (!FTPReply.isPositiveCompletion(replyCode)) {
System.out.println("connect failed...ftp服务器:" + this.hostname + ":" + this.port);
}
System.out.println("connect successfu...ftp服务器:" + this.hostname + ":" + this.port);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 上传文件
*
* @param pathname ftp服务保存地址
* @param fileName 上传到ftp的文件名
* @param originfilename 待上传文件的名称(绝对地址) *
* @return
*/
public boolean uploadFile(String pathname, String fileName, MultipartFile file) {
boolean flag = false;
InputStream inputStream = null;
try {
System.out.println("开始上传文件");
// inputStream = new FileInputStream(new File(originfilename));
inputStream = file.getInputStream();
initFtpClient();
ftpClient.setFil