单文件上传示例
创建 jsp 文件
<form action="${pageContext.request.contextPath}/user/upload1" method="post" enctype="multipart/form-data">
<input type="text" name="userName"><br>
<input type="file" name="uploadFile"><br>
<input type="submit" value="提交">
</form>
文件上传表单项中
- type 为 file
- method 为 post
- enctype 为 multipart/form-data
导入相关依赖
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
配置文件上传解析器
在 spring-mvc.xml 中进行如下配置
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="102400"/>
<property name="maxUploadSizePerFile" value="102400"/>
<property name="defaultEncoding" value="UTF-8"/>
</bean>
maxUploadSize 设置上传文件的最大值
maxUploadSizePerFile 设置上传单个文件的最大值
defaultEncoding 设置默认编码
创建 Controller 中相应业务方法
@RequestMapping(value = "/upload1")
@ResponseBody
public void upload1(String userName, MultipartFile uploadFile) throws IOException {
System.out.println(userName);
String originalFilename = uploadFile.getOriginalFilename();
uploadFile.transferTo(new File("C:\\upload\\" + originalFilename));
}
用 MultipartFile 类型接受上传的文件,该形参名与 jsp 中 type 为 file 的表单项的 name 保持一致
getOriginalFilename() 方法获取上传文件的文件名
transferTo() 方法将文件转存到指定路径,其参数为一个 File 对象
多文件上传示例
多参数接受
在表单中新增一个文件上传表单项,每个文件上传表单项的 name 不同
<form action="${pageContext.request.contextPath}/user/upload2" method="post" enctype="multipart/form-data">
<input type="text" name="userName"><br>
<input type="file" name="uploadFile1"><br>
<input type="file" name="uploadFile2"><br>
<input type="submit" value="提交">
</form>
在业务方法中用两个 MultipartFile 类型的参数接受上传的文件,并进行相应转存即可
@RequestMapping(value = "/upload2")
@ResponseBody
public void upload2(String userName, MultipartFile uploadFile1, MultipartFile uploadFile2) throws IOException {
System.out.println(userName);
String originalFilename1 = uploadFile1.getOriginalFilename();
uploadFile1.transferTo(new File("C:\\upload\\" + originalFilename1));
String originalFilename2 = uploadFile2.getOriginalFilename();
uploadFile2.transferTo(new File("C:\\upload\\" + originalFilename2));
}
数组接受
在表单中新增一个文件上传表单项,每个文件上传表单项的 name 相同
<form action="${pageContext.request.contextPath}/user/upload3" method="post" enctype="multipart/form-data">
<input type="text" name="userName"><br>
<input type="file" name="uploadFiles"><br>
<input type="file" name="uploadFiles"><br>
<input type="submit" value="提交">
</form>
在业务方法中用一个 MultipartFile 数组类型的参数接受上传的文件,并进行相应转存即可
@RequestMapping(value = "/upload3")
@ResponseBody
public void upload3(String userName, MultipartFile[] uploadFiles) throws IOException {
System.out.println(userName);
for (MultipartFile uploadFile : uploadFiles) {
String originalFilename = uploadFile.getOriginalFilename();
uploadFile.transferTo(new File("C:\\upload\\" + originalFilename));
}
}