使用apache的开源jar包完成上传功能,使用jar包分别是:common-fileupload.jar和common-io.jar
/**
* 批量上传文件
*
* @param request
* @param response
* @param username
* 用户名; 用于区分用户上传的图片
* @param moduleName
* 模块名称; 用于区分该图片是位于那个模块进行上传
* @return
* @throws FileNotFoundException
*/
public static List<String> uploadFile(HttpServletRequest request, String username, String moduleName)
throws FileNotFoundException {
// 创建list集合,用于接收上传文件的路径
List<String> filePathList = new ArrayList<String>();
// 拼接文件上传位置,这里使用Tomcat服务器,将文件上传到webapps中,和项目同目录,files将用于保存上传的文件,将上传的文件于项目分开
String strPath = ",webapps,files," + moduleName + "," + username;
// 解析出文件存放路径位置
String filepath = System.getProperty("catalina.base") + strPath.replace(',', File.separatorChar);
log.debug("文件上传位置-------->>>>>>>>>>>>" + filepath);
// 转换request,解析出request中的文件
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
// 获取文件map集合
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
String fileName = null;
// 循环遍历,取出单个文件
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
// 获取单个文件
MultipartFile mf = entity.getValue();
// 获得原始文件名
fileName = mf.getOriginalFilename();
// 截取文件类型; 这里可以根据文件类型进行判断
String fileType = fileName.substring(fileName.lastIndexOf('.'));
try {
// 截取上传的文件名称
String newFileName = fileName.substring(0, fileName.lastIndexOf('.'));
log.debug("上传来的文件名称------->>>>>>>>>" + newFileName);
// 拼接上传文件位置
String newfilePath = filepath + File.separatorChar + newFileName + fileType;
log.debug("拼接好的文件路径地址------------->>>>>>>>" + newfilePath);
// 重新组装文件路径,用于保存在list集合中
String filepathUrl = "files" + File.separatorChar + moduleName + File.separatorChar + username
+ File.separatorChar + newFileName + fileType;
log.debug("文件位置---------------->>>>>>>>>>" + filepathUrl);
// 创建文件存放路径实例
File dest = new File(filepath);
// 判断文件夹不存在就创建
if (!dest.exists()) {
dest.mkdirs();
}
// 创建文件实例
File uploadFile = new File(newfilePath);
// 判断文件已经存在,则删除该文件
if (uploadFile.exists()) {
uploadFile.delete();
}
log.debug("start upload file-------------->>>>>>> " + fileName);
// 利于spring中的FileCopyUtils.copy()将文件复制
FileCopyUtils.copy(mf.getBytes(), uploadFile);
// 将文件路径存入list集合中
filePathList.add(filepathUrl);
} catch (IOException e) {
e.printStackTrace();
log.error("upload failed. filename: " + fileName + "---->>>error message ----->>>>> " + e.getMessage());
return null;
}
}
return filePathList;
}
FormData
function file_upload() {
// 创建表单数据对象
var obj = new FormData();
// 获取文件框中的数据
var file1 = document.getElementById("file1").files[0];
var file2 = document.getElementById("file2").files[0];
// 将文件数据添加至表单数据对象中
obj.append("file1", file1);
obj.append("file2", file2);
console.log("请求参数---》》》" + obj);
// 使用ajax异步文件上传
$.ajax({
url : util.basePath() + 'secure/upload-file/uploadDemo',
type : 'POST',
data : obj,
contentType : false,
processData : false,
mimeType : 'multipart/form-data',
success : function(data) {
console.log(data);
}
})
}
uploadMethosd
@PostMapping("/upload")
public Map<String, Object> uploadFile(MultipartFile file, HttpServletRequest req) {
Map<String, Object> map = new HashMap<>();
String fileName = file.getOriginalFilename();
String realPath = req.getServletContext().getRealPath("/");
System.out.println(realPath + "real");
// 创建文件夹
File foder = new File(realPath + "aacc");
if (!foder.exists()) {
foder.mkdirs();
}
String newFileName = UUID.randomUUID().toString() + fileName.substring(fileName.indexOf("."));
try {
file.transferTo(new File(foder, newFileName));
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
map.put("fileName", newFileName);
map.put("filePath", realPath + "aacc");
map.put("msg", "SUCCESS");
map.put("CODE", HttpServletResponse.SC_OK);
map.put("quicefier", realPath + "aacc\\" + newFileName);
return map;
}
}