当前位置:网站首页 > 技术博客 > 正文

上传文件 springboot



Spring WebFlux 是一个响应式 Web 框架,它提供了一个非阻塞 Event Loop,可异步处理 I/O 操作。此外,它还使用 和 Reactive Stream Publisher 在订阅时发布数据。

这种响应式方式可帮助应用处理大量请求和数据,而无需分配大量资源。

本文将带你了解如何在 Spring WebFlux 中处理 Multipart 文件上传。

创建一个简单的响应式 Spring Boot 项目,将 Multipart 文件上传到一个目录。

为简单起见,使用项目的根目录来存储文件。在生产中,可以使用 云厂商 OSSMinio 存储等文件系统。

首先,在 中添加 依赖,以启动 Spring WebFlux 应用:

它提供核心 Spring WebFlux API 和嵌入式 Netty 服务器,用于构建响应式 Web 应用。

另外,还要在 文件中添加 数据库依赖:

Spring WebFlux R2DBC 是一个响应式数据库连接器(Database Connector),而 H2 数据库是一个内存数据库。

最后,在 中添加 R2DBC 原生驱动:

这个原生驱动是为H2数据库实现的。

创建 实体类

创建 Repository:

最后,创建 Controller:

示例如下,把 Multipart 文件上传到根目录。但没有把文件名称和扩展名保存到数据库。

首先,创建一个名为 的方法,该方法接受 对象。然后,在每个 对象上调用 方法来传输文件并返回一个 。这将为每个文件传输操作创建一个单独的 ,并将 流扁平化为一个单一的 。

还使用了 方法来明确处理与文件上传相关的异常。如果上传失败,端点会返回错误信息。

注意,在出现异常之前,之前上传的文件可能已经成功传输。在这种情况下,可能需要进行清理,删除错误上传的部分文件。

通过 Postman 上传多个 Multipart 文件来测试端点:

Postman 上传文件

如上,向项目根目录上传了两个文件。端点返回 OK,表明操作已成功完成。

还可以将文件名映射到数据库实体。这样,以后就可以灵活地通过文件 Id 检索文件。

首先,在 文件夹中创建一个 文件,以定义数据库表结构:

如上,创建了一个文件记录表,用于存储上传的文件名及其扩展名。接下来,编写一个配置类,以在启动时初始化 Schema:

另外,还要在 文件中定义数据库 URL:

定义 R2DBC URL 以连接 H2 数据库。为简单起见,数据库没有设置密码。

创建一个 Service 类,实现持久化数据。

如上,在 Service 类中注入 接口,并通过 方法保存实体。

接下来,将 类注入 Controller 类:

最后,编写一个端点,将 Multipart 文件上传到根目录,并将文件名及其扩展名映射到实体类:

如上,创建了一个返回 的端点。它接受 并上传每个文件。然后,它会收集文件名及其扩展名,并将它们映射到 实体。

用 Postman 测试端点:

Postman 文件上传

如上,将两个名为 和 的文件上传到服务器,并返回请求的详细信息。

为了简单起见,这里没有验证文件名、类型和大小。

再实现一个端点,通过 Id 检索存储的文件记录,以查看对应的文件名。

首先,在 Service 类中添加通过 Id 检索文件记录的逻辑:

如上,调用 上的 方法,通过其 id 来检索存储的 。

最后,实现根据 Id 检索文件的端点:

该端点会返回一个包含文件 Id 和文件名的 。

使用 Postman 来测试端点:

Postman 根据 ID 检索记录

如上,成功地返回了对应的文件信息。

本文介绍了如何在 Spring WebFlux 实现 Multipart 文件上传,以及如何把上传文件的文件名称和扩展名存储到数据库。


Ref:

  • 上一篇: mfc开源项目
  • 下一篇: vue实现滑动验证
  • 版权声明


    相关文章:

  • mfc开源项目2025-08-19 23:01:01
  • 二叉树遍历解题技巧2025-08-19 23:01:01
  • 国产数据库清单2025-08-19 23:01:01
  • 查找在文件testfile2025-08-19 23:01:01
  • strtok_r2025-08-19 23:01:01
  • vue实现滑动验证2025-08-19 23:01:01
  • oracle游标的用法2025-08-19 23:01:01
  • 备忘录设计图2025-08-19 23:01:01
  • 峰值信噪比是什么意思2025-08-19 23:01:01
  • win10流量监控在哪2025-08-19 23:01:01