1.导入工具类
package com.gree.server.config.Util;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
/** * ftp上传工具类 */
public class FtpUtil {
//ftp服务器IP地址
private static final String FTP_ADDRESS="x.x.x.x";
//端口号
private static final int FTP_PORT=21;
//用户名
private static final String FTP_USERNAME="xxx";
// 密码
private static final String FTP_PASSWORD="xxx";
//附件路径
private static final String FTP_BASEPATH="/xxx/";
public static String uploadFile(MultipartFile file) throws IOException {
//获取上传的文件流
InputStream inputStream = file.getInputStream();
//获取上传的文件名
String filename=file.getOriginalFilename();
//截取后缀
String suffix= filename.substring(filename.lastIndexOf("."));
//当前时间
SimpleDateFormat df=new SimpleDateFormat("yyyyMMdd");
//使用UUID拼接后缀,定义一个不重复的文件名
String finalName = UUID.randomUUID()+df.format(new Date())+suffix;
FTPClient ftp=new FTPClient();
try {
int reply;
ftp.connect(FTP_ADDRESS, FTP_PORT);//连接FTP服务器
ftp.login(FTP_USERNAME,FTP_PASSWORD);//登录
reply= ftp.getReplyCode();
if(!FTPReply.isPositiveCompletion(reply)){
ftp.disconnect();
return null;
}
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
ftp.makeDirectory(FTP_BASEPATH);
ftp.changeWorkingDirectory(FTP_BASEPATH);
ftp.enterLocalPassiveMode();
ftp.storeFile(finalName,inputStream);
inputStream.close();
ftp.logout();
}
catch (IOException e){
e.printStackTrace();
return null;
}finally {
if (ftp.isConnected()){
try {
ftp.disconnect();
}catch (IOException ioe){
ioe.printStackTrace();
}
}
}
return finalName;
}
}
2.在项目中调用方法
//调用ftp工具类
//我们调用上传图片是通过一个特殊的流,调用完图片就直接存储到ftp中了,所以需要创建一个单独的接口进行上传图片,就不能放在添加巡查信息功能中跟巡查信息一起上传。
@ApiOperation(value = "上传图片")
@PostMapping("/addIMGFile")
public RespBean addIMGFile(@RequestParam("IMGFile")MultipartFile file) throws IOException {
//调用自定义的Ftp工具类上传文件
String finalName= FtpUtil.uploadFile(file);
return RespBean.success(finalName);
}
3.前端使用
调用上传图片接口“/addIMGFile
”后,就可以在前端界面上传图片了。
注意IMGFile
,这个是用来定位的。
@RequestParam("IMGFile")