向宁 3eb1a1839d feat: add JWT auth middleware with public endpoint selector
Add HS256 JWT authentication to both HTTP and gRPC servers using
Kratos jwt middleware with selector to skip auth for public share
endpoints (GetShareInfo, DownloadShare). Wire DI updated to inject
conf.Auth into server constructors.
2026-05-25 13:43:34 +08:00
2025-12-18 09:51:13 +08:00
2025-12-19 16:32:20 +08:00
2026-01-05 20:23:49 +08:00

RustFS 文件存储系统

基于 RustFS S3 兼容存储的高性能文件服务系统,提供文件上传、下载、分片上传、存储桶管理等完整功能。

功能特性

  • 文件操作: 上传、下载、删除、列表、预览
  • 分片上传: 支持大文件分片上传,提高上传成功率
  • 存储桶管理: 创建、列表、删除存储桶
  • API 授权: 所有 API 接口都需要密钥验证,保证安全性
  • Swagger 文档: 完整的 API 文档支持
  • Web UI: 提供简洁的 Web 界面

技术栈

  • 框架: Gin (Go Web Framework)
  • 存储: RustFS S3 (AWS S3 Compatible)
  • API 文档: Swagger
  • 架构模式: CQRS + Mediator

快速开始

环境要求

  • Go 1.23.2+
  • Docker (用于运行 RustFS 服务)

安装运行

# 克隆项目
git clone http://192.168.1.154:8888/root/file_service.git
cd file_service

# 启动 RustFS 服务
docker-compose up -d

# 编译并运行服务
go run cmd/server/main.go

服务将在 http://localhost:8080 启动

访问地址

API 授权

安全性

所有 API 接口都需要通过授权验证才能访问。每个请求必须在请求头中包含有效的 API 密钥。

授权信息

  • 请求头: X-API-Key
  • 密钥值: xn001624.

使用示例

# 列出所有存储桶
curl -X GET http://localhost:8080/buckets \
  -H "X-API-Key: xn001624."

# 上传文件
curl -X POST http://localhost:8080/files/upload \
  -H "X-API-Key: xn001624." \
  -F "file=@/path/to/file.txt" \
  -F "bucket=my-bucket" \
  -F "path=/uploads/"

# 下载文件
curl -X GET "http://localhost:8080/files/download?bucket=my-bucket&path=/uploads/file.txt" \
  -H "X-API-Key: xn001624." \
  -o downloaded_file.txt

错误响应

如果未提供或提供了无效的 API 密钥,将返回:

{
  "code": 401,
  "message": "未授权请在请求头中提供有效的API密钥",
  "error": "Missing or invalid API key"
}

API 接口

文件操作

接口 方法 描述
/files/upload POST 上传文件
/files/download GET 下载文件
/files/list GET 列出文件
/files/preview GET 获取文件预览URL
/files/delete DELETE 删除文件

分片上传

接口 方法 描述
/files/multipart/init POST 初始化分片上传
/files/multipart/part PUT 上传分片
/files/multipart/complete POST 完成分片上传

存储桶操作

接口 方法 描述
/buckets POST 创建存储桶
/buckets GET 列出存储桶
/buckets DELETE 删除存储桶

项目结构

file_service/
├── cmd/
│   └── server/
│       └── main.go              # 程序入口
├── internal/
│   ├── api/
│   │   ├── endpoints/           # API 端点定义
│   │   ├── handlers/            # 请求处理器
│   │   └── validators/          # 请求验证器
│   ├── common/                  # 公共配置和工具
│   ├── domain/
│   │   └── repository/          # 数据仓储接口
│   ├── infrastructure/
│   │   ├── mediator/            # CQRS Mediator 实现
│   │   └── s3/                  # S3 客户端实现
│   └── middleware/
│       └── auth.go              # 授权中间件
├── docs/
│   └── AUTH_GUIDE.md            # 授权使用指南
├── web/                         # Web UI 资源
├── docker-compose.yml           # Docker 编排配置
├── Dockerfile                   # Docker 镜像构建
└── .gitlab-ci.yml               # CI/CD 配置

配置

配置文件位于 internal/common/config.go,主要配置项:

type Config struct {
    ServerPort      string  // 服务端口
    RustFSEndpoint  string  // RustFS S3 端点
    RustFSAccessKey string  // RustFS 访问密钥
    RustFSSecretKey string  // RustFS 秘密密钥
    RustFSRegion    string  // S3 区域
    RustFSUseSSL    bool    // 是否使用 SSL
}

开发指南

编译项目

go build -o file-service ./cmd/server/main.go

运行测试

go test ./...

生成 Swagger 文档

swag init -g cmd/server/main.go

部署

Docker 部署

# 构建镜像
docker build -t file-service:latest .

# 运行容器
docker run -p 8080:8080 file-service:latest

Docker Compose 部署

docker-compose up -d

文档

更新日志

v1.1 (最新)

  • 添加 API 授权中间件,所有接口需要密钥验证
  • 📝 完善项目文档
  • 🔧 优化配置管理

v1.0

  • 🎉 初始版本发布
  • 实现基础文件操作功能
  • 实现分片上传功能
  • 实现存储桶管理功能

许可证

MIT License

联系方式

如有问题或建议,请提交 Issue 或 Merge Request。

Description
No description provided
Readme 29 MiB
Languages
C# 99.5%
Dockerfile 0.5%