下面我来为您讲解 Spring MVC 中上传文件的完整攻略。在讲解之前,需要先说明一下,本篇攻略的代码演示是基于 Spring 5 版本和 Servlet 4.0 规范进行的。
一、搭建项目环境和导入相关依赖
首先,我们需要在本地搭建 Spring MVC 项目环境,这里就不在过多赘述,可参考官方文档进行搭建。搭建好了 Spring MVC 项目环境之后,我们需要在项目中添加以下依赖。
<!--springmvc相关依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.9</version>
</dependency>
<!--servlet-api-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!--jstl-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.3</version>
</dependency>
这里需要注意的一点是,由于 Servlet 4.0 是 Java EE 8 规范的一部分,而 Spring Web MVC 5.x 版本是基于 Servlet 3.1 进行开发的,因此在使用 Servlet 4.0 的一些新特性时需要进行一些特殊的配置。
二、配置Spring Bean
接下来,我们需要在 Spring MVC 的配置文件中配置上传文件的配置项,包括:
- 设置文件上传的大小限制
- 上传文件的临时存储目录
以下代码是配置文件上传相关的 bean 的示例代码:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="5242880" />
<property name="defaultEncoding" value="UTF-8" />
<property name="resolvedUploadDir" value="/tmp" />
<property name="uploadTempDir">
<bean class="org.springframework.web.context.support.StandardServletEnvironment" factory-method="getServletConfigProperties">
<constructor-arg ref="servletContext"/>
</bean>
</property>
</bean>
其中,maxUploadSize
表示上传文件的大小限制,这里的大小是值字节数,上述代码中限制了上传文件的最大大小为 5M。resolvedUploadDir
表示上传文件的存储目录,这里设置为系统的临时目录。uploadTempDir
表示上传文件的临时存储目录,StandardServletEnvironment
是 Spring 提供的类,用于从 Servlet 上下文中获取配置信息,并将其注入 bean 中使用。
三、编写控制器代码
接下来,我们需要针对上传文件编写控制器的代码。以下是示例代码:
@Controller
@RequestMapping("/file")
public class FileUploadController {
@RequestMapping(method = RequestMethod.GET)
public String uploadForm() {
return "uploadForm";
}
@RequestMapping(method = RequestMethod.POST)
public String processUpload(@RequestParam("file") MultipartFile file, Model model) {
String fileName = file.getOriginalFilename();
try {
File tmpFile = File.createTempFile("upload_", fileName);
file.transferTo(tmpFile);
model.addAttribute("message", "文件上传成功!");
} catch (IOException e) {
model.addAttribute("message", "文件上传失败!");
e.printStackTrace();
}
return "uploadResult";
}
}
上述代码中,我们编写了一个名为 FileUploadController 的控制器类,用于接收客户端上传的文件,并对其进行处理。其中 @RequestMapping("/file")
指定该控制器处理的请求路径为 /file,@RequestParam("file")
表示指定客户端传入的文件在 POST
请求中的参数名为 file。
四、编写上传文件表单页面
为了测试上传文件功能,我们需要在页面中编写表单,以便向服务端发送上传文件的请求。以下是示例代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>上传文件实例</title>
</head>
<body>
<h2>选择要上传的文件</h2>
<form method="post" action="/file" enctype="multipart/form-data">
<input type="file" name="file">
<br><br>
<input type="submit" value="上传文件">
</form>
</body>
</html>
上述代码中,我们使用 <form>
标签创建了一个上传文件的表单,其中 enctype="multipart/form-data"
表示文件上传表单的编码类型。表单包括一个文件选择框和一个上传按钮。
五、测试运行
将以上代码添加到对应的文件中,并将项目启动后,在浏览器中访问 http://localhost:8080/file
,便可以进入文件上传表单页面,选择要上传的文件后点击“上传文件”按钮,系统会将选择的文件上传到服务器上。我们可以在控制器中编写代码,对上传成功或失败后的文件进行处理,并给出相应的提示信息。
以上是 Spring MVC 中上传文件的完整攻略。如果您还有其他的问题,可以在留言区给我留言。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring MVC中上传文件实例 - Python技术站