Spring Boot之文件上传:实现简单易用的文件上传功能

简介: 本篇详细介绍了在Spring Boot应用中实现文件上传功能的步骤。从创建前端页面、编写Controller处理、文件存储与访问、添加路由与页面展示等方面进行了详细讲解,并提供了代码示例。通过学习本文,读者可以轻松了解如何在Spring Boot项目中实现简单易用的文件上传功能,从而在实际应用中更好地满足用户需求。

概述

文件上传是Web应用开发中常见的需求之一,Spring Boot提供了便捷的方式来实现文件上传功能。本篇技术长博文将详细介绍如何在Spring Boot应用中实现文件上传,包括前端页面、Controller处理、文件存储以及安全性考虑,通过代码示例演示了实际操作。
文件上传原理

表单的enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。
当表单的enctype="application/x-www-form-urlencoded"(默认)时,form表单中的数据格式为:key=value&key=value
当表单的enctype="multipart/form-data"时,其传输数据形式如下

image.png

1. 创建Spring Boot项目

首先,在IDE中创建一个新的Spring Boot项目,确保已包含Web依赖。

2. 编写前端页面

src/main/resources/templates目录下创建一个HTML页面,用于文件上传。

<!DOCTYPE html>
<html>
<head>
    <title>文件上传示例</title>
</head>
<body>
    <h1>文件上传示例</h1>
    <form action="/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="file" accept=".jpg, .png, .pdf">
        <button type="submit">上传文件</button>
    </form>
</body>
</html>

3. 编写Controller处理文件上传

创建一个Controller类,处理文件上传请求并保存文件。

@Controller
public class FileUploadController {
   

    private static final String UPLOAD_DIR = "uploads/";

    @PostMapping("/upload")
    public String uploadFile(@RequestParam("file") MultipartFile file) {
   
        if (file.isEmpty()) {
   
            return "redirect:/uploadFailure";
        }

        try {
   
            byte[] bytes = file.getBytes();
            Path path = Paths.get(UPLOAD_DIR + file.getOriginalFilename());
            Files.write(path, bytes);
        } catch (IOException e) {
   
            e.printStackTrace();
            return "redirect:/uploadFailure";
        }

        return "redirect:/uploadSuccess";
    }
}

4. 文件存储与访问

src/main/resources目录下创建一个uploads文件夹,用于存储上传的文件。为了访问这些文件,你可以配置Spring Boot的静态资源路径。

spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:uploads/

5. 添加路由与页面展示

创建两个简单的HTML页面,用于展示上传结果。

uploadSuccess.html

<!DOCTYPE html>
<html>
<head>
    <title>上传成功</title>
</head>
<body>
    <h1>上传成功</h1>
    <a href="/upload">返回</a>
</body>
</html>

uploadFailure.html

<!DOCTYPE html>
<html>
<head>
    <title>上传失败</title>
</head>
<body>
    <h1>上传失败</h1>
    <a href="/upload">返回</a>
</body>
</html>

6. 运行与测试

运行Spring Boot应用,访问http://localhost:8081/upload,上传一个文件,然后会根据上传结果跳转到相应的页面。

7.其他

Spring Boot工程嵌入的tomcat限制了请求的文件大小,每个文件的配置最大为1Mb,单次请求的文件的总数不能大于10Mb。
要更改这个默认值需要在配置文件(如application.properties)中加入两个配置

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

上传功能

当表单的enctype="multipart/form-data",可以使用MultipartFile 获取上传的文件数据,再通过transferTo方法将其写入到磁盘中
package com.example.controller;

import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.Date;

@RestController
public class FileUploadController {
   

   @PostMapping("/upload")
   public String up(String nickname, MultipartFile photo, HttpServletRequest request) throws IOException {
   
       System.out.println(nickname);
       // 获取图片的原始名称
       System.out.println(photo.getOriginalFilename());
       // 取文件类型
       System.out.println(photo.getContentType());

       String path = request.getServletContext().getRealPath("/upload/");
       System.out.println(path);
       saveFile(photo,path);
       return "上传成功";
  }

//
   public void saveFile(MultipartFile photo,String path) throws IOException {
   
//       判断存储的目录是否存在,如果不存在则创建
       File dir = new File(path);
       if(!dir.exists()){
   
//         创建目录
           dir.mkdir();
      }

       File file = new File(path+photo.getOriginalFilename());
       photo.transferTo(file);
  }
}

测试

image.png

总结

本文详细介绍了如何在Spring Boot应用中实现文件上传功能。通过前端页面、Controller处理、文件存储和页面展示等步骤,你可以轻松地在Spring Boot应用中添加文件上传功能。通过学习本文内容,你可以更加深入地理解文件上传的实现原理,从而在实际项目中应用和扩展该功能。

相关文章
|
27天前
|
Java 关系型数据库 MySQL
创建一个SpringBoot项目,实现简单的CRUD功能和分页查询
【9月更文挑战第6天】该内容介绍如何使用 Spring Boot 实现具备 CRUD 功能及分页查询的项目。首先通过 Spring Initializr 创建项目并选择所需依赖;其次配置数据库连接,并创建实体类与数据访问层;接着构建服务层处理业务逻辑;最后创建控制器处理 HTTP 请求。分页查询可通过添加 URL 参数实现。
|
2月前
|
XML 前端开发 Java
基于SpringBoot 3.3实现任意文件在线预览功能的技术分享
【8月更文挑战第30天】在当今的数字化办公环境中,文件在线预览已成为提升工作效率、优化用户体验的重要功能之一。无论是文档、图片、PDF还是代码文件,用户都期望能够直接在浏览器中快速查看而无需下载。本文将围绕如何在Spring Boot 3.3框架下实现这一功能,分享一系列技术干货,助力开发者高效构建文件预览服务。
150 2
|
4天前
|
存储 前端开发 Java
Spring Boot 集成 MinIO 与 KKFile 实现文件预览功能
本文详细介绍如何在Spring Boot项目中集成MinIO对象存储系统与KKFileView文件预览工具,实现文件上传及在线预览功能。首先搭建MinIO服务器,并在Spring Boot中配置MinIO SDK进行文件管理;接着通过KKFileView提供文件预览服务,最终实现文档管理系统的高效文件处理能力。
|
5天前
|
前端开发 Java easyexcel
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
14 6
|
1月前
|
NoSQL 前端开发 Java
使用 Spring Boot + Neo4j 实现知识图谱功能开发
在数据驱动的时代,知识图谱作为一种强大的信息组织方式,正逐渐在各个领域展现出其独特的价值。本文将围绕使用Spring Boot结合Neo4j图数据库来实现知识图谱功能开发的技术细节进行分享,帮助读者理解并掌握这一技术栈在实际项目中的应用。
102 4
|
2月前
|
机器学习/深度学习 文字识别 前端开发
基于 Spring Boot 3.3 + OCR 实现图片转文字功能
【8月更文挑战第30天】在当今数字化信息时代,图像中的文字信息越来越重要。无论是文档扫描、名片识别,还是车辆牌照识别,OCR(Optical Character Recognition,光学字符识别)技术都发挥着关键作用。本文将围绕如何使用Spring Boot 3.3结合OCR技术,实现图片转文字的功能,分享工作学习中的技术干货。
78 2
|
2月前
|
安全 Java 应用服务中间件
如何在 Spring Boot 3.3 中实现请求 IP 白名单拦截功能
【8月更文挑战第30天】在构建Web应用时,确保应用的安全性是至关重要的。其中,对访问者的IP地址进行限制是一种常见的安全措施,特别是通过实施IP白名单策略,可以只允许特定的IP地址或IP段访问应用,从而有效防止未授权的访问。在Spring Boot 3.3中,我们可以通过多种方式实现这一功能,下面将详细介绍几种实用的方法。
87 1
|
2月前
|
算法 Java UED
你的Spring Boot应用是否足够健壮?揭秘限流功能的实现秘诀
【8月更文挑战第29天】限流是保障服务稳定性的关键策略,通过限制单位时间内的请求数量防止服务过载。本文基于理论介绍,结合Spring Boot应用实例,展示了使用`@RateLimiter`注解和集成`Resilience4j`库实现限流的方法。无论采用哪种方式,都能有效控制请求速率,增强应用的健壮性和用户体验。通过这些示例,读者可以灵活选择适合自身需求的限流方案。
47 2
|
2月前
|
Java Spring 监控
危机时刻,Spring框架如何拯救你的应用?深入探讨健康检查与自我修复功能
【8月更文挑战第31天】在现代软件架构中,应用的稳定性和可用性至关重要。本文介绍Spring框架中的健康检查与自我修复机制,通过Spring Boot Actuator的`/health`端点监控应用状态,并结合Spring Cloud Hystrix实现服务容错和断路器功能,提高应用健壮性。借助这些工具,开发者能轻松监控应用健康状况并在发现问题时自动采取措施,确保服务高可用性。要实现完善的机制,需根据具体应用架构和需求进行配置和扩展。
40 0
|
设计模式 开发框架 安全
Spring 功能介绍|学习笔记
快速学习 Spring 功能介绍
104 0
下一篇
无影云桌面