springmvc文件上传

client上传文件通过form表单发送数据

form.encType常用类型:

1)application/x-www-form-urlencoded:会将表单内的数据转换为键值对

2)multipart/form-data:既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。

3)application/octet-stream只可以上传二进制数据,通常用来上传文件,由于没有键值,所以,一次只能上传一个文件。’

 

确认参数名与上传request参数名称对应一致,避免传入的参数为空,

未配置多媒体数据解析器报错如下

Request processing failed; 
nested exception is org.springframework.web.multipart.MultipartException:
 Failed to parse multipart servlet request; nested exception is java.lang.IllegalStateException: 
Unable to process parts as no multi-part configuration has been provided

springmvc上传文件对应接收

@RequestMapping("/item") Controller 中形参方法实现

@RequestMapping("/uploadMultiPartOne")
	public String upload(MultipartFile multipartFile) throws Exception {
		if(multipartFile!=null) {
			// 客户端上传文件名
			String uploadFileName = multipartFile.getOriginalFilename();
			// 文件后缀uploadFileName.substring(uploadFileName.lastIndexOf("."));
			// UUID.randomUUID().toString() 产生的字符串唯一
			String newFileName = UUID.randomUUID().toString()+uploadFileName.substring(uploadFileName.lastIndexOf("."));
			File file = new File("F:\\uploadMultipartFile\\"+newFileName);
			multipartFile.transferTo(file);
			return "item/success";
		}else {
			return "item/error";
		}
	}

多媒体表单input.name与接收请求形参名一致,数据绑定,form.encType=multipart/form-data

<form action="${pageContext.request.contextPath }/item/uploadMultiPartOne" method="post" name="testUploadFrom" enctype="multipart/form-data">
		<input type="file" name="multipartFile">
	</form>

springmvc多文件上传的接收

@RequestMapping("/item") Controller 中只带request形参方法实现

@RequestMapping("/uploadMultiPartMore")
	public String upload(HttpServletRequest request) throws Exception {
		// 创建解析请求上下文解析器对象
		CommonsMultipartResolver cmResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
		// 判断请求 encType属性是否为multipart/form-data
		if(cmResolver.isMultipart(request)) {
			// 将HttpServletRequest请求强转为Spring的MultipartHttpServletRequest,是一个将请求包装的过程
			MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
			// 得到迭代所有文件key的迭代器
			Iterator<String> iterator = multipartRequest.getFileNames();
			while(iterator.hasNext()) {
				// 迭代所以文件保存的key,key即 form.fileInput.name
				String key = iterator.next().toString();
				// 得到多媒体文件
				MultipartFile multipartFile = multipartRequest.getFile(key);
				// 判断对象非空将数据写入文件
				if(multipartFile!=null) {
					String path = "F:\\uploadMultipartFile\\"+multipartFile.getOriginalFilename();
					multipartFile.transferTo(new File(path));
				}
			}
			return "item/success";
		}
		return "item/error";
	}

多媒体表单form.encType=multipart/form-data,保证表单fileInput.name唯一标识

<form action="${pageContext.request.contextPath }/item/uploadMultiPartMore" method="post" name="testUploadFrom" enctype="multipart/form-data">
		<input type="file" name="multipartFile1">
		<input type="file" name="multipartFile2">
		<input type="file" name="multipartFile3">
	</form>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值