SpringMVC框架学习记录 5 文件上传

单文件上传示例

创建 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));
	}
}

Guess you like

Origin blog.csdn.net/qq_25274377/article/details/121628774