SpringMVC多文件上传
几乎在所有的JavaWeb项目中都会用到文件上传功能,下面博主介绍一种SpringMVC提供的文件上传方法:
文件上传一般过程:
- 浏览器选择要上传的文件
- 点击页面中的上传按钮
- 服务器接受到请求
- 路由分发
- 请求提交给处理代码
- 保存数据和文件
本篇博文只讲***文件处理***,文件处理代码如下:
/**
* 多文件上传
*
* @param request HttpServletRequest对象
* @param basePath 文件保存的基础路径
* @return 返回所有上传文件的文件名称和保存路径
*/
public static Map<String, Object> upload(HttpServletRequest request, String basePath) {
if (!basePath.substring(basePath.length() - 1, basePath.length()).equals("\\")) {
basePath += "\\";
}
Map<String, Object> map = new HashMap<String, Object>();
// 将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
// 检查请求中是否有enctype="multipart/form-data"
if (multipartResolver.isMultipart(request)) {
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
// 获取multiRequest 中所有的文件名
Iterator<String> iter = multiRequest.getFileNames();
SimpleDateFormat format = new SimpleDateFormat("yyyy\\MM\\dd\\");
String secondPath = format.format(new Date());
File dir = new File(basePath + secondPath);
if (!dir.exists()) {
dir.mkdirs();
}
while (iter.hasNext()) {
MultipartFile file = multiRequest.getFile(iter.next().toString());
if(file.getSize() < 1) {
continue;
}
if (file != null) {
String suffix = StringUtil.getFileSuffix(file.getOriginalFilename());
String path = basePath + secondPath + UUID.randomUUID().toString().replaceAll("-", "") + "." + suffix;
File f = new File(path);
try {
if (!f.exists()) {
f.createNewFile();
}
file.transferTo(new File(path));
map.put(file.getName(), path);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return map;
} else {
return null;
}
}
除了使用SpringMVC自带的组件实现上传功能,在JavaWeb开发中还有非常多的文件上传实现方式,只是SpringMVC方式是当下最流行的web框架,所以这里只介绍这种文件上传方式。