87 lines
2.3 KiB
Go
87 lines
2.3 KiB
Go
//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))
|
||
}
|