算了,后端我自己写吧
This commit is contained in:
@@ -0,0 +1,154 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/goccy/go-yaml"
|
||||
)
|
||||
|
||||
// Config 全局配置
|
||||
type Config struct {
|
||||
Web WebConfig `yaml:"web"`
|
||||
Database DatabaseConfig `yaml:"database"`
|
||||
User UserConfig `yaml:"user"`
|
||||
File FileConfig `yaml:"file"`
|
||||
}
|
||||
|
||||
// WebConfig Web服务配置
|
||||
type WebConfig struct {
|
||||
Host string `yaml:"host"`
|
||||
Port string `yaml:"port"`
|
||||
TLS bool `yaml:"tls"`
|
||||
CertPrivatePath string `yaml:"certPrivatePath"`
|
||||
CertPublicPath string `yaml:"certPublicPath"`
|
||||
}
|
||||
|
||||
// DatabaseConfig 数据库配置
|
||||
type DatabaseConfig struct {
|
||||
Type string `yaml:"type"` // sqlite, mysql, postgres
|
||||
Path string `yaml:"path"` // SQLite路径
|
||||
Host string `yaml:"host"`
|
||||
Port string `yaml:"port"`
|
||||
Name string `yaml:"name"`
|
||||
User string `yaml:"user"`
|
||||
Pass string `yaml:"pass"`
|
||||
}
|
||||
|
||||
// UserConfig 用户相关配置
|
||||
type UserConfig struct {
|
||||
CookieTimeout int `yaml:"cookieTimeout"`
|
||||
PassHashType string `yaml:"passHashType"` // text, md5, md5salt
|
||||
}
|
||||
|
||||
// FileConfig 文件上传配置
|
||||
type FileConfig struct {
|
||||
MaxSize uint64 `yaml:"maxSize"`
|
||||
Paths map[string]string `yaml:"paths"`
|
||||
AllowImageMime map[string]string `yaml:"allowImageMime"`
|
||||
AllowVideoMime map[string]string `yaml:"allowVideoMime"`
|
||||
AllowMusicMime map[string]string `yaml:"allowMusicMime"`
|
||||
AllowPdfMime map[string]string `yaml:"allowPdfMime"`
|
||||
}
|
||||
|
||||
// Current 全局配置实例
|
||||
var Current *Config
|
||||
|
||||
// Load 加载配置文件
|
||||
func Load(configPath string) error {
|
||||
// 如果配置文件不存在,创建默认配置
|
||||
if !fileExists(configPath) {
|
||||
if err := createDefaultConfig(configPath); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// 读取配置文件
|
||||
data, err := os.ReadFile(configPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 解析YAML
|
||||
config := &Config{}
|
||||
if err := yaml.Unmarshal(data, config); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Current = config
|
||||
return nil
|
||||
}
|
||||
|
||||
// 检查文件是否存在
|
||||
func fileExists(path string) bool {
|
||||
_, err := os.Stat(path)
|
||||
return err == nil
|
||||
}
|
||||
|
||||
// 创建默认配置文件
|
||||
func createDefaultConfig(path string) error {
|
||||
// 确保目录存在
|
||||
dir := filepath.Dir(path)
|
||||
if err := os.MkdirAll(dir, 0755); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 默认配置
|
||||
defaultConfig := &Config{
|
||||
Web: WebConfig{
|
||||
Host: "127.0.0.1",
|
||||
Port: "8080",
|
||||
TLS: false,
|
||||
},
|
||||
Database: DatabaseConfig{
|
||||
Type: "sqlite",
|
||||
Path: "data/database.db",
|
||||
},
|
||||
User: UserConfig{
|
||||
CookieTimeout: 604800,
|
||||
PassHashType: "md5",
|
||||
},
|
||||
File: FileConfig{
|
||||
MaxSize: 52428800, // 50MB
|
||||
Paths: map[string]string{
|
||||
"avatar": "data/static/avatar/",
|
||||
"image": "data/upload/image/",
|
||||
"video": "data/upload/video/",
|
||||
"music": "data/upload/music/",
|
||||
"pdf": "data/upload/pdf/",
|
||||
"other": "data/upload/other/",
|
||||
},
|
||||
AllowImageMime: map[string]string{
|
||||
"image/jpeg": ".jpeg",
|
||||
"image/png": ".png",
|
||||
"image/gif": ".gif",
|
||||
"image/bmp": ".bmp",
|
||||
},
|
||||
AllowVideoMime: map[string]string{
|
||||
"video/mp4": ".mp4",
|
||||
"video/x-msvideo": ".avi",
|
||||
"video/quicktime": ".mov",
|
||||
"video/x-flv": ".flv",
|
||||
"video/mpeg": ".mpeg",
|
||||
},
|
||||
AllowMusicMime: map[string]string{
|
||||
"audio/mpeg": ".mpeg",
|
||||
"audio/aac": ".aac",
|
||||
"audio/wav": ".wav",
|
||||
"audio/flac": ".flac",
|
||||
},
|
||||
AllowPdfMime: map[string]string{
|
||||
"application/pdf": ".pdf",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// 序列化为YAML
|
||||
data, err := yaml.Marshal(defaultConfig)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 写入文件
|
||||
return os.WriteFile(path, data, 0644)
|
||||
}
|
||||
Reference in New Issue
Block a user