//go:build example // +build example package main import ( "log" "net/http" "git.toowon.com/jimmy/go-common/config" "git.toowon.com/jimmy/go-common/middleware" "git.toowon.com/jimmy/go-common/storage" ) func main() { // 加载配置 cfg, err := config.LoadFromFile("./config/example.json") if err != nil { log.Fatal("Failed to load config:", err) } // 优先演示本地存储(可直接运行) localStorage, err := storage.NewStorage(storage.StorageTypeLocal, cfg) if err != nil { log.Fatal("Failed to create Local storage:", err) } uploadHandler := storage.NewUploadHandler(storage.UploadHandlerConfig{ Storage: localStorage, MaxFileSize: 10 * 1024 * 1024, // 10MB AllowedExts: []string{".jpg", ".jpeg", ".png", ".gif", ".pdf"}, ObjectPrefix: "uploads/", }) proxyHandler := storage.NewProxyHandler(localStorage) // 创建中间件链 var corsConfig *middleware.CORSConfig if cfg.GetCORS() != nil { c := cfg.GetCORS() corsConfig = middleware.NewCORSConfig( c.AllowedOrigins, c.AllowedMethods, c.AllowedHeaders, c.ExposedHeaders, c.AllowCredentials, c.MaxAge, ) } chain := middleware.NewChain( middleware.CORS(corsConfig), middleware.Timezone, ) // 注册路由 mux := http.NewServeMux() mux.Handle("/upload", chain.Then(uploadHandler)) mux.Handle("/file", chain.Then(proxyHandler)) log.Println("Local storage server started on :8080") log.Println("Upload: POST /upload") log.Println("View: GET /file?key=uploads/xxx.jpg") // 提示:OSS 需要你自行集成对应 SDK(当前 go-common 中仅提供接口框架) if _, err := storage.NewStorage(storage.StorageTypeOSS, cfg); err != nil { log.Printf("OSS storage not ready: %v", err) } // 演示MinIO存储 minioStorage, err := storage.NewStorage(storage.StorageTypeMinIO, cfg) if err != nil { log.Printf("Failed to create MinIO storage: %v", err) log.Println("Note: MinIO SDK integration is required") } else { log.Printf("MinIO storage created: %v", minioStorage != nil) } // 演示对象键生成 objectKey1 := storage.GenerateObjectKey("images/", "test.jpg") log.Printf("Object key 1: %s", objectKey1) objectKey2 := storage.GenerateObjectKeyWithDate("images", "test.jpg") log.Printf("Object key 2: %s", objectKey2) log.Fatal(http.ListenAndServe(":8080", mux)) }