微信登录

文件上传 - 单文件上传 - 实现单个文件上传

Java - Web - Spring 《文件上传 - 单文件上传 - 实现单个文件上传》

在Web开发中,文件上传是一个非常常见的功能。比如用户上传头像、上传文档等场景都需要用到文件上传功能。在Spring框架中,实现单文件上传是相对简单的,下面我们将详细介绍如何在Spring项目中实现单个文件的上传。

1. 环境准备

在开始之前,我们需要确保已经搭建好了Spring项目。如果你使用的是Spring Boot,可以在pom.xml中添加以下依赖:

  1. <dependencies>
  2. <!-- Spring Web -->
  3. <dependency>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-starter-web</artifactId>
  6. </dependency>
  7. <!-- 支持文件上传 -->
  8. <dependency>
  9. <groupId>commons-fileupload</groupId>
  10. <artifactId>commons-fileupload</artifactId>
  11. <version>1.4</version>
  12. </dependency>
  13. <dependency>
  14. <groupId>commons-io</groupId>
  15. <artifactId>commons-io</artifactId>
  16. <version>2.11.0</version>
  17. </dependency>
  18. </dependencies>

2. 配置文件上传解析器

在Spring Boot中,我们不需要手动配置文件上传解析器,Spring Boot会自动帮我们配置好。但如果是传统的Spring项目,需要在配置文件中添加如下配置:

  1. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  2. <!-- 设置最大上传文件大小,单位为字节 -->
  3. <property name="maxUploadSize" value="10485760"/>
  4. </bean>

3. 创建前端页面

创建一个简单的HTML页面用于文件上传,命名为upload.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>单文件上传</title>
  6. </head>
  7. <body>
  8. <form action="/upload" method="post" enctype="multipart/form-data">
  9. <input type="file" name="file"/>
  10. <input type="submit" value="上传"/>
  11. </form>
  12. </body>
  13. </html>

需要注意的是,表单的enctype属性必须设置为multipart/form-data,这样才能支持文件上传。

4. 创建Controller处理文件上传请求

创建一个Controller类来处理文件上传请求:

  1. import org.springframework.stereotype.Controller;
  2. import org.springframework.web.bind.annotation.PostMapping;
  3. import org.springframework.web.bind.annotation.RequestParam;
  4. import org.springframework.web.multipart.MultipartFile;
  5. import java.io.File;
  6. import java.io.IOException;
  7. @Controller
  8. public class FileUploadController {
  9. @PostMapping("/upload")
  10. public String handleFileUpload(@RequestParam("file") MultipartFile file) {
  11. if (!file.isEmpty()) {
  12. try {
  13. // 获取文件的原始文件名
  14. String originalFilename = file.getOriginalFilename();
  15. // 指定文件保存的路径
  16. String filePath = "D:/uploads/";
  17. File dest = new File(filePath + originalFilename);
  18. // 判断目录是否存在,不存在则创建
  19. if (!dest.getParentFile().exists()) {
  20. dest.getParentFile().mkdirs();
  21. }
  22. // 将文件保存到指定路径
  23. file.transferTo(dest);
  24. System.out.println("文件上传成功:" + originalFilename);
  25. return "success";
  26. } catch (IOException e) {
  27. e.printStackTrace();
  28. System.out.println("文件上传失败:" + e.getMessage());
  29. return "error";
  30. }
  31. } else {
  32. System.out.println("上传的文件为空");
  33. return "error";
  34. }
  35. }
  36. }

在上述代码中,我们使用@RequestParam注解来接收上传的文件,MultipartFile是Spring提供的用于处理文件上传的接口。通过transferTo方法将文件保存到指定的路径。

5. 创建结果页面

创建success.htmlerror.html两个页面用于显示文件上传的结果:

success.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>上传成功</title>
  6. </head>
  7. <body>
  8. <h1>文件上传成功!</h1>
  9. </body>
  10. </html>

error.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>上传失败</title>
  6. </head>
  7. <body>
  8. <h1>文件上传失败,请重试!</h1>
  9. </body>
  10. </html>

6. 运行项目

启动Spring Boot项目,访问http://localhost:8080/upload.html,选择一个文件并点击上传按钮,根据上传结果会跳转到相应的页面。

总结

步骤 操作 说明
1 环境准备 添加必要的依赖
2 配置文件上传解析器 Spring Boot自动配置,传统Spring项目需手动配置
3 创建前端页面 表单的enctype属性必须设置为multipart/form-data
4 创建Controller处理请求 使用@RequestParamMultipartFile处理文件上传
5 创建结果页面 显示文件上传的结果
6 运行项目 访问上传页面进行测试

通过以上步骤,我们就可以在Spring项目中实现单个文件的上传功能了。这个功能可以方便地应用到各种Web项目中,为用户提供文件上传的服务。

文件上传 - 单文件上传 - 实现单个文件上传