package app import ( "errors" "mime/multipart" "strings" "git.echol.cn/loser/st/server/global" "git.echol.cn/loser/st/server/utils/upload" "go.uber.org/zap" ) type UploadService struct{} // UploadImage 上传图片到 OSS // 返回图片的访问 URL func (s *UploadService) UploadImage(header *multipart.FileHeader) (string, error) { // 验证文件类型 if !isImageFile(header.Filename) { return "", errors.New("只支持图片格式:jpg, jpeg, png, gif, webp") } // 验证文件大小(限制 10MB) if header.Size > 10*1024*1024 { return "", errors.New("图片大小不能超过 10MB") } // 使用 OSS 上传 oss := upload.NewOss() filePath, _, uploadErr := oss.UploadFile(header) if uploadErr != nil { global.GVA_LOG.Error("图片上传失败", zap.Error(uploadErr)) return "", errors.New("图片上传失败") } return filePath, nil } // isImageFile 检查是否为图片文件 func isImageFile(filename string) bool { ext := strings.ToLower(filename[strings.LastIndex(filename, ".")+1:]) imageExts := []string{"jpg", "jpeg", "png", "gif", "webp"} for _, validExt := range imageExts { if ext == validExt { return true } } return false }