话不多说上代码
1.引入的包
import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.*;
2.注入FTP上传工具类
参考我的上一篇FTP工具类文章
@Resource
private FTPUtil fTPUtil;
3.内容主体
dirs ----->文件目录名称
fTPUtil.uploadFile,参考我的上一篇FTP工具类文章
public FileVo SavepointManagerVideo(HttpServletRequest request, String dirs) {
HashMap<String, String> extMap = new HashMap<String, String>();
extMap.put("video", "mp4,f4a,qsv,avi");//用于判断文件后缀
FileVo vo = new FileVo();
// 最大文件大小
long maxSize = 157286400;
if (!ServletFileUpload.isMultipartContent(request)) {
vo.setMsg("请选择文件!");
vo.setCode(1);
return vo;
}
//判断上传文件夹的目录名称
String dirName = request.getParameter("dirs");
if (!extMap.containsKey(dirName)) {
vo.setMsg("目录名不正确!");
vo.setCode(1);
return vo;
}
MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = mRequest.getFileMap();
String fileName = null;
try {
ArrayList<String> UrlList= new ArrayList<>();//接受上传成功后的地址
for (Iterator<Map.Entry<String, MultipartFile>> it = fileMap.entrySet().iterator(); it.hasNext(); ) {
Map.Entry<String, MultipartFile> entry = it.next();
MultipartFile mFile = entry.getValue();
fileName = mFile.getOriginalFilename();
// 检查文件大小
if (mFile.getSize() > maxSize) {
vo.setMsg("上传文件大小超过限制!");
vo.setCode(1);
return vo;
// return "上传文件大小超过限制!";
}
String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1);
if (!Arrays.<String>asList(extMap.get(dirName).split(",")).contains(fileExt)) {
// return "上传文件扩展名是不允许的扩展名。\n只允许" + extMap.get(dirName)
// + "格式!";
vo.setMsg("文件格式不正确");
vo.setCode(1);
return vo;
}
// 上传文件名 WpDate.getNo(2)是我一个工具类的方法,生成随机文件名称
String newName = WpDate.getNo(2) + "." + fileExt;
// 上传的路径
String imagePath = dirs + "/" + WpDate.dateToStrShort(new Date());
String saveUrl = fTPUtil.uploadFile(imagePath, newName, mFile.getInputStream());
System.out.println(saveUrl);
UrlList.add(saveUrl);
}
vo.setCode(0);
vo.setMsg("上传成功");
Map<String, Object> map = new HashMap<>();
map.put("src", UrlList);
vo.setData(map);
return vo;
} catch (IOException e) {
e.printStackTrace();
}
return vo;
}
4. 生成随机数文件夹,自己写也可以
WpDate.getNo(2)
/**
* 保证一次产生10000个随机数内无重复 平均一秒钟能产生250个随机数
*/
private static List<String> randList = new ArrayList<String>();
/**
* 产生随机数,一般可用作表单主键ID
*
* @param k
* @return
*/
public static String getNo(int k) {
if (randList.size() > 10000) {
randList.clear();
}
String rno = getNoNo(k);
while (randList.contains(rno)) {
rno = getNoNo(k);
}
randList.add(rno);
return rno;
}
5. 返回实体类
FileVo
private String msg;// 错误信息
private Integer code;// 状态码 0 成功 1 失败
private Map<String,Object> data;
6.总结
Map.entrySet() :遍历MAP所有key
iterator.hasNext(): 判断key是否存在,返回boolean类型
iterator.next():指针向下移动,并返回对应元素,如没有则抛异常
iterator.remove():删除当前指针对应的元素,如没有则抛异常