feat: rename qiniu to oss, add admin upload proxy with thumbnail, add dev-login

- Rename all QINIU_* config/code/docs to OSS_* to match actual Alibaba Cloud OSS
- Refactor upload module from internal/common/qiniu to internal/common/upload
- Add backend proxy upload endpoint (POST /api/admin/marketing/upload) to avoid CORS
- Auto-generate compressed thumbnail (800px, JPEG 80%) on admin image upload
- Add dev-login endpoint (POST /api/v1/auth/dev-login) for H5 debugging
- Add imageutil package for server-side image resizing

Made-with: Cursor
This commit is contained in:
nepiedg
2026-04-04 02:52:16 +08:00
parent aeaf6a04c2
commit 1eab1b99c1
21 changed files with 1023 additions and 191 deletions
+15 -15
View File
@@ -17,7 +17,7 @@ type Config struct {
ShortVideo ShortVideoConfig
AI AIConfig
Admin AdminConfig
Qiniu QiniuConfig
OSS OSSConfig
WeChatOA WeChatOfficialConfig
Redis RedisConfig
}
@@ -71,9 +71,9 @@ type AdminConfig struct {
DefaultPassword string
}
// QiniuConfig 用于七牛云(Kodo直传相关配置。
// 前端通常会向后端请求 upload token,然后直传文件到七牛
type QiniuConfig struct {
// OSSConfig 用于阿里云 OSS 直传相关配置。
// 前端通常会向后端请求上传凭证,然后直传文件到 OSS
type OSSConfig struct {
AccessKey string
SecretKey string
Bucket string
@@ -151,17 +151,17 @@ func LoadConfig() {
DefaultUsername: getEnv("ADMIN_DEFAULT_USERNAME", "admin"),
DefaultPassword: getEnv("ADMIN_DEFAULT_PASSWORD", "admin123"),
},
Qiniu: QiniuConfig{
AccessKey: getEnv("QINIU_ACCESS_KEY", ""),
SecretKey: getEnv("QINIU_SECRET_KEY", ""),
Bucket: getEnv("QINIU_BUCKET", ""),
UploadURL: getEnv("QINIU_UPLOAD_URL", "https://upload.qiniup.com"),
CDNDomain: getEnv("QINIU_CDN_DOMAIN", ""),
KeyPrefix: getEnv("QINIU_KEY_PREFIX", "uploads/"),
TokenExpireSeconds: getEnvAsInt("QINIU_TOKEN_EXPIRE_SECONDS", 300),
CallbackURL: getEnv("QINIU_CALLBACK_URL", ""),
CallbackBody: getEnv("QINIU_CALLBACK_BODY", "key=$(key)&hash=$(etag)&fsize=$(fsize)&mimeType=$(mimeType)"),
CallbackBodyType: getEnv("QINIU_CALLBACK_BODY_TYPE", "application/x-www-form-urlencoded"),
OSS: OSSConfig{
AccessKey: getEnv("OSS_ACCESS_KEY", ""),
SecretKey: getEnv("OSS_SECRET_KEY", ""),
Bucket: getEnv("OSS_BUCKET", ""),
UploadURL: getEnv("OSS_UPLOAD_URL", ""),
CDNDomain: getEnv("OSS_CDN_DOMAIN", ""),
KeyPrefix: getEnv("OSS_KEY_PREFIX", "uploads/"),
TokenExpireSeconds: getEnvAsInt("OSS_TOKEN_EXPIRE_SECONDS", 300),
CallbackURL: getEnv("OSS_CALLBACK_URL", ""),
CallbackBody: getEnv("OSS_CALLBACK_BODY", "key=$(key)&hash=$(etag)&fsize=$(fsize)&mimeType=$(mimeType)"),
CallbackBodyType: getEnv("OSS_CALLBACK_BODY_TYPE", "application/x-www-form-urlencoded"),
},
WeChatOA: WeChatOfficialConfig{
AppID: getEnv("WECHAT_OA_APP_ID", ""),