搭建本地 Mino WebApi
搭建本地 Mino WebApi
前言:在实现一个文档管理模块时,前端使用的是Ant Design Blazor框架,使用Upload组件上传文件时,它有个Action属性(具体如下),点击图片上传就会去请求这个接口,完成图片上传到服务器,如果想要不使用Action通过api接口直接上传,官方推荐使用原生的InputFile,我一想,怎么写着写着还倒退了,我个人非常不喜欢,我觉得新出来的东西肯定比老的要好,尤其是在ui这块,于是否决了使用InputFile的方法。
但是我目前所做的项目是一个blazor server项目,他的项目结构主要有两个应用程序,一个是Web,还有个是WebApi,Web下面是前端和后端服务,WebApi下面则是api接口,这是供后面移动端调用的。那在此项目中,最好的办法是将上传接口写在WebApi里面,然后启动的时候需要同时启动两个,这样前端点击上传的时候就可以直接访问WebApi提供的上传接口。但是这个方法有个缺点,就是为了一个Api启动整个WebApi项目,有点高射炮打蚊子的感觉。
想到上传文件这个功能,不仅在当前项目中需要用到,公司的其他三个项目也要用到,那为什么不使用minio搭建一个WebApi呢?这个WebApi来负责上传、下载功能,其他系统只需要调用Api即可,也不需要去每个系统中集成Minio了,那不是轻松很多?更加高效。
js
1 | <Upload @ref="upload" |
说干就干,开始以minio搭建一个WebApi项目。
一、项目功能
- 支持文件上传与下载,自动按文件类型、日期归档存储。
- 自动配置MinIO凭证、密钥、桶信息。
- 桶不存在时自动创建。
- 支持常见文件类型(Excel、Word、PNG、JPG、PDF)分文件夹管理。
- 上传同名文件时,系统自动为文件名添加唯一后缀(如时间戳+短guid),避免覆盖,便于溯源。
二、技术栈/依赖库
- .NET 8 WebAPI
- MinIO .NET SDK
- ASP.NET Core 配置系统
- 依赖注入与中间件
三、详细需求
- 配置自动化:
- 通过
appsettings.json配置MinIO服务地址、AccessKey、SecretKey、默认桶名。
- 通过
- 桶管理:
- 程序启动时检测桶是否存在,不存在则自动创建。
- 文件归档存储:
- 归档结构为:
- 一级目录:桶名称(bucket)
- 二级目录:文件类型(如excel、word、png、jpg、pdf,需标准化小写)
- 三级目录:日期(yyyyMMdd)
- 四级目录:具体文件
- 示例路径:
bucket/excel/20240601/xxx.xlsx - 桶数量建议控制在合理范围,文件类型需统一标准。
- 归档结构为:
- 上传接口:
- 支持多种文件类型上传,自动归档。
- 返回文件访问路径或下载链接。
- 下载接口:
- 支持按路径下载指定文件。
- 安全与签名校验:
- 上传和下载接口必须支持HMAC-SHA256签名校验,防止接口被伪造、重放。
- 客户端需在请求Header中携带:
X-Api-Key:API密钥标识X-Timestamp:当前Unix时间戳(秒)X-Signature:签名值
- 签名内容格式:
X-Api-Key + X-Timestamp + 文件内容,用配置的api-key做HMAC-SHA256生成签名。 - 服务端需校验:
- Header参数完整性
- 时间戳有效性(如5分钟内)
- 签名正确性
- api-key需通过配置文件安全管理,建议定期更换。
- 签名算法、Header约定、异常响应需在接口文档中明确说明。
四、应用场景
- 企业内部文档管理、归档。
- 业务系统文件上传、下载统一存储。
- 支持多服务器/本地MinIO部署,便于开发、测试、生产环境切换。
项目已开源
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.






