1、前端(name的值和接口的@RequestParam的value相同,并且enctype为multipart/form-data)
springmvc文件上传到ftp服务器
<form name="form1" action="/manage/product/upload.do" method="post" enctype="multipart/form-data">
<input type="file" name="upload_file"/>
<input type="submit" value="springmvc上传文件"/>
</form>
2、后端接口(controller)
/**
* 文件上传到ftp服务器上(在springmvc上配置了文件上传的配置)
* @param file
* @param request
* @return
*/
@RequestMapping("upload.do")
@ResponseBody
public ServerResponse upload(HttpSession session,@RequestParam(value="upload_file",required = false)MultipartFile file, HttpServletRequest request){
User user= (User) session.getAttribute(Const.CURRENT_USER);
if(user==null){
return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),"用户未登陆,请登陆管理员");
}
if(iUserService.checkAdminRole(user).isSuccess()){//表示是管理员
//业务逻辑
//从request里面拿
String path=request.getSession().getServletContext().getRealPath("upload");
String targetFileName=iFileService.upload(file,path);
String url= PropertiesUtil.getProperty("ftp.server.http.prefix")+targetFileName;
Map fileMap= Maps.newHashMap();
fileMap.put("uri",targetFileName);
fileMap.put("url",url);
return ServerResponse.createBySuccess(fileMap);
}else {
return ServerResponse.createByErrorMessage("无权限操作");
}
}
3、serviceImpl
package com.lpy.mall.service.Impl;
import com.google.common.collect.Lists;
import com.lpy.mall.service.IFileService;
import com.lpy.mall.util.FTPUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
@Service("iFileService")
public class FileServiceImpl implements IFileService {
private Logger logger = LoggerFactory.getLogger(FileServiceImpl.class);
/**
* @param file
* @param path 为上传的一个路径
* @return
*/
public String upload(MultipartFile file,String path){
//1、拿到我们上传文件的文件名
String fileName=file.getOriginalFilename();
//2、获取扩展名 abc.jpg abc.abc.abc.jpg 拿取最后一个.
String fileExtensionName=fileName.substring(fileName.lastIndexOf(".")+1);
//3、上传后的文件的文件名
String uploadFileName= UUID.randomUUID().toString()+"."+fileExtensionName;
logger.info("开始上传文件,上传文件的文件名:{},上传的路径:{},新文件名:{}",fileName,path,uploadFileName);
//4、声明目录的file
File fileDir = new File(path);
if(!fileDir.exists()){
fileDir.setWritable(true);//使这文件有写的权限
fileDir.mkdirs();//创建目录
}
//5、声明我们的文件 (路径加我们的新的文件名)
File targetFile = new File(path,uploadFileName);
try {
file.transferTo(targetFile);
//到这里,文件已经上传成功
//将targetFile上传到问们的FTP服务器上
FTPUtil.uploadFile(Lists.<File>newArrayList(targetFile));
//已经上传到ftp服务器上
//上传完之后,删除upload下面的文件
targetFile.delete();
} catch (IOException e) {
logger.error("文件上传异常",e);
return null;
}
return targetFile.getName();
}
}