SpringMVC的多文件上传解决方案

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框架,所以这里只介绍这种文件上传方式。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值