开发中,常常需要提交表单,表单数据一般都是键值对的组合,对于一般文本内容我们这里不做探究,想说一下对于文件上传的处理。我们常用的服务端开发框架是SpringMVC,基于此有两种上传表单数据的方案
<!-- 文件上传下载配置-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置最大上传文件大小100MB -->
<property name="maxUploadSize">
<value>104857600</value>
</property>
<property name="maxInMemorySize">
<value>4096</value>
</property>
</bean>
- 使用@RequestParam注解方式
这种方式能直接拿到文件,接收注解内所写关键词的文件请求
- 单文件
@RequestParam("file") MultipartFile file
- 多文件
@RequestParam("files") MultipartFile[] files
可以看出这是一个MultipartFile数组
- 使用HttpServletRequest 接收方式
这种方式需要经过处理才能拿到需要的数据,适用于多文件且不知道文件关键词的情况,动态表单适用
- 验证过的代码
//转化成MultipartHttpServletRequest
MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
//表单除了文件外的参数
Map<String, String[]> parameterMap = multipartHttpServletRequest.getParameterMap();
//表单上传的文件
MultiValueMap<String, MultipartFile> multiValueMap =multipartHttpServletRequest.getMultiFileMap();
- 尚未验证过的代码,参考 springmvc 多文件上传接收方式
//转化成MultipartHttpServletRequest
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
//获取map,遍历map 取 value = MultipartFile
//这种方式不需要固定文件请求字段,随便写什么都可以,只要不重复。file1,file2,upload1,upload2都可以
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
//这种方式和MultipartFile[]一样,指定接收file字段文件请求
List<MultipartFile> files = multipartRequest.getFiles("file");