实现 MinIO 对象存储图片流水线(可迁移 OSS)
- 新增 S3 兼容 Storage 抽象与 MinIO 实现,compose 启动 MinIO - 上传接口:校验 → 缩放 → WebP → 主图/缩略图入库 - 消息图片 content 改为对象 URL,拒绝 base64 - 工作台/访客端改为先上传再发消息
This commit is contained in:
+18
-2
@@ -1,13 +1,16 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"kefu-sys/server/internal/config"
|
||||
"kefu-sys/server/internal/handler"
|
||||
"kefu-sys/server/internal/middleware"
|
||||
"kefu-sys/server/internal/model"
|
||||
"kefu-sys/server/internal/storage"
|
||||
"kefu-sys/server/internal/ws"
|
||||
)
|
||||
|
||||
@@ -20,6 +23,19 @@ func main() {
|
||||
// 初始化 JWT
|
||||
middleware.InitJWT(cfg.JWT.Secret)
|
||||
|
||||
// 对象存储(MinIO / S3 兼容)
|
||||
store, err := storage.NewS3(cfg.Storage)
|
||||
if err != nil {
|
||||
log.Fatalf("对象存储初始化失败: %v", err)
|
||||
}
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
defer cancel()
|
||||
if err := store.EnsureBucket(ctx); err != nil {
|
||||
log.Printf("警告: 确保存储桶失败(可稍后启动 MinIO): %v", err)
|
||||
} else {
|
||||
log.Printf("对象存储就绪: %s bucket=%s public=%s", cfg.Storage.Endpoint, cfg.Storage.Bucket, cfg.Storage.PublicBase)
|
||||
}
|
||||
|
||||
// 启动 WebSocket Hub
|
||||
go ws.DefaultHub.Run()
|
||||
|
||||
@@ -32,7 +48,7 @@ func main() {
|
||||
r.Use(func(c *gin.Context) {
|
||||
c.Header("Access-Control-Allow-Origin", "*")
|
||||
c.Header("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS")
|
||||
c.Header("Access-Control-Allow-Headers", "Content-Type,Authorization")
|
||||
c.Header("Access-Control-Allow-Headers", "Content-Type,Authorization,X-Visitor-Token")
|
||||
if c.Request.Method == "OPTIONS" {
|
||||
c.AbortWithStatus(204)
|
||||
return
|
||||
@@ -46,7 +62,7 @@ func main() {
|
||||
})
|
||||
|
||||
// 注册路由
|
||||
handler.SetupRoutes(r)
|
||||
handler.SetupRoutes(r, store, cfg.Storage)
|
||||
|
||||
log.Printf("客服云服务启动在 :%s", cfg.Server.Port)
|
||||
if err := r.Run(":" + cfg.Server.Port); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user