<!-- ftpclient -->
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.1</version>
</dependency>
一、config
//FTP服务器设置正式服务器(内网)
public static final String IP = "192.168.2.134";//IP
public static final String username = "Administrator";//用户名
public static final String password = "dlxx_2020";//密码
public static final int port = 21;//端口号
public static final String path = "D:/java/file";//ftp根目录
public static final String LOGIN_FTP_IMAGE = "/logincode"; //FTP文件服务器图片地址
public static final String NGINX_IMAGE = "http://192.168.2.134:8082/";
二、工具类
package com.donglian.util;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.SocketException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.StringTokenizer;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.springframework.web.multipart.MultipartFile;
import com.donglian.config.CONF;
import net.coobird.thumbnailator.builders.BufferedImageBuilder;
import net.coobird.thumbnailator.resizers.Resizers;
/**
* https://blog.csdn.net/zhangxiaomin1992/article/details/73644279
* FTP文件上传工具类
* @ClassName: FtpUtils
* @author: fkx
* @date: 2019年10月23日 下午5:39:25
*/
public class FtpUtils {
/**
* 文件上传
* @param mfile
* @param path 文件路径
* @param fileName 文件名称
* @return
*/
public static boolean uploadToFtp(MultipartFile mfile,String path,String fileName){
FTPClient ftpClient = new FTPClient();
try {
//指定的服务器地址
String ip = CONF.IP;
//用户名
String user = CONF.username;
//密码
String password = CONF.password;
//服务器端口 默认22
int port = CONF.port;
//上传文件到指定服务器的指定目录自行修改
//String path = CONF.path;
//连接ftp服务器 参数填服务器的ip
ftpClient.connect(ip,port);
//进行登录 参数分别为账号 密码
boolean istrue=ftpClient.login(user,password);
if(!istrue){
return false;
}
//在ftp文件服务器上创建多层目录文件,如果有ftp服务器已存在该文件,则不创建,如果无,则创建
// CreateDirecroty(ftpClient,path);
createMkdirs(ftpClient,path);
/*
* 改变工作目录(按自己需要是否改变)
* 只能选择local_root下已存在的目录
*/
ftpClient.changeWorkingDirectory(path);
System.out.println(ftpClient.printWorkingDirectory());
//设置文件类型为二进制文件
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
//开启被动模式(按自己如何配置的ftp服务器来决定是否开启)
//ftpClient.enterLocalPassiveMode();
// InputStream fileins = mfile.getInputStream();
FileInputStream fileins = (FileInputStream) mfile.getInputStream();
//上传文件 参数:上传后的文件名,输入流
ftpClient.enterLocalPassiveMode();
ftpClient.storeFile(fileName, fileins);
//System.err.println("写入FTP图片服务器成功:"+file.getName());
fileins.close();
ftpClient.disconnect();
//System.out.println(file.getName());
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
public static void createMkdirs(FTPClient ftp, String path) {
// ftp.makeDirectory(path);// 这个方法不会改变当前工作目录
// 保证可以创建多层目录
StringTokenizer s = new StringTokenizer(path, "/");
s.countTokens();
String pathName = "";
while (s.hasMoreElements()) {
pathName = pathName + "/" + (String) s.nextElement();
try {
ftp.mkd(pathName);
} catch (Exception e) {
}
}
}
/**
* 文件上传
* @param file
* @param path "/"+useridUtil.getRunitid()+"/"+useridUtil.getUname()
* @return
*/
public static boolean uploadToFtp(File file,String path){
FTPClient ftpClient = new FTPClient();
try {
//指定的服务器地址
String ip = CONF.IP;
//用户名
String user = CONF.username;
//密码
String password = CONF.password;
//服务器端口 默认22
int port = CONF.port;
//上传文件到指定服务器的指定目录自行修改
//String path = CONF.path;
//连接ftp服务器 参数填服务器的ip
ftpClient.connect(ip,port);
//进行登录 参数分别为账号 密码
boolean istrue=ftpClient.login(user,password);
if(!istrue){
return false;
}
//改变工作目录(按自己需要是否改变)
//只能选择local_root下已存在的目录
ftpClient.changeWorkingDirectory(path);
//在ftp文件服务器上创建多层目录文件,如果有ftp服务器已存在该文件,则不创建,如果无,则创建
CreateDirecroty(ftpClient,path);
//设置文件类型为二进制文件
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
//开启被动模式(按自己如何配置的ftp服务器来决定是否开启)
//ftpClient.enterLocalPassiveMode();
FileInputStream fileins=new File