50 lines
1.2 KiB
Go
50 lines
1.2 KiB
Go
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
|
||
}
|