Files
go-common/examples/storage_example.go
2026-01-30 21:40:21 +08:00

87 lines
2.3 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//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))
}