1. properties配置
#ftp
ftp.url=192.168.101.1 ftp路径
ftp.host=21 ftp端口号
ftp.user=ftpadmin 用户名
ftp.password=123456 密码
ftppath:/ftpFile 上传的路径
2. ftp上传工具类
* Description: 向FTP服务器上传文件
* @param ftpHost FTP服务器hostname
* @param ftpUserName 账号
* @param ftpPassword 密码
* @param ftpPort 端口
* @param fileName ftp文件名称
* @param input 文件流
* @return 成功返回true,否则返回false
*/
public static boolean uploadFile(String ftpHost, String ftpUserName,
String ftpPassword, int ftpPort,
String fileName,InputStream input) {
boolean success = false;
FTPClient ftpClient = null;
try {
int reply;
ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftpClient.disconnect();
return success;
}
ftpClient.setControlEncoding("UTF-8"); // 中文支持
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
//ftpClient.changeWorkingDirectory(ftpPath);
//设置编码,防止上传的时候使用postman上传成功,但是前端上传失败(编码的格式)
ftpClient.storeFile(new String(fileName.getBytes("gbk"), "iso-8859-1"), input);
input.close();
ftpClient.logout();
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
}
3. 一个简单的Controller
@Value("${ftp.url}")
private String server;
@Value("${ftp.host}")
private int port;
@Value("${ftp.user}")
private String userName;
@Value("${ftp.password}")
private String userPassword;
@Value("${ftppath}")
private String ftppath;
/**
*上传图片到ftp
* @return
* @throws Exception
*/
@RequestMapping(value = "saveUploadFile",method = RequestMethod.POST)
@ResponseBody
public ReturnResult saveUploadFile(@RequestBody MultipartFile file, HttpServletRequest request) throws Exception{
try {
String fileName = file.getOriginalFilename();
String name = request.getParameter("river");
FtpUtils ftp = new FtpUtils(server,port,userName,userPassword);
if(name!=null){
videoService.updateGgp(name,fileName);
if (ftp.open()) {
ftp.uploadFile(server, userName,
userPassword, port,
fileName,file.getInputStream());
}
if (fileName == null){
Map<String,Object> map = new HashMap<>();
map.put("上传失败",fileName);
}
}
Map<String,Object> map = new HashMap<>();
map.put("name",fileName);
return new ReturnResult(Constant.ResultCode.SUCCESS, "请求成功", map);
} catch (Exception e) {
e.printStackTrace();
return new ReturnResult(Constant.ResultCode.ERROR, "请求失败");
}
}
postman测试成功上传图片到FTP服务器,同时数据库的图片路径也修改为上传的这个图片的路径