49
server/service/app/upload.go
Normal file
49
server/service/app/upload.go
Normal file
@@ -0,0 +1,49 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user