65 lines
1.5 KiB
Go
65 lines
1.5 KiB
Go
package uploader
|
||
|
||
import (
|
||
"strings"
|
||
"sync"
|
||
|
||
"github.com/mlogclub/simple/common/strs"
|
||
"github.com/mlogclub/simple/common/urls"
|
||
|
||
"bbs-go/internal/pkg/config"
|
||
)
|
||
|
||
type uploader interface {
|
||
PutImage(data []byte, contentType string) (string, error)
|
||
PutObject(key string, data []byte, contentType string) (string, error)
|
||
CopyImage(originUrl string) (string, error)
|
||
}
|
||
|
||
var (
|
||
aliyun = &aliyunOssUploader{
|
||
once: sync.Once{},
|
||
bucket: nil,
|
||
}
|
||
local = &localUploader{}
|
||
)
|
||
|
||
func PutImage(data []byte, contentType string) (string, error) {
|
||
return getUploader().PutImage(data, contentType)
|
||
}
|
||
|
||
func PutObject(key string, data []byte, contentType string) (string, error) {
|
||
return getUploader().PutObject(key, data, contentType)
|
||
}
|
||
|
||
func CopyImage(url string) (string, error) {
|
||
u1 := urls.ParseUrl(url).GetURL()
|
||
u2 := urls.ParseUrl(config.Instance.BaseUrl).GetURL()
|
||
// 本站host,不下载
|
||
if u1.Host == u2.Host {
|
||
return url, nil
|
||
}
|
||
return getUploader().CopyImage(url)
|
||
}
|
||
|
||
func getUploader() uploader {
|
||
if IsEnabledOss() {
|
||
return aliyun
|
||
} else {
|
||
return local
|
||
}
|
||
}
|
||
|
||
// IsEnabledOss 是否启用阿里云oss
|
||
func IsEnabledOss() bool {
|
||
enable := config.Instance.Uploader.Enable
|
||
return strs.EqualsIgnoreCase(enable, "aliyun") || strs.EqualsIgnoreCase(enable, "oss") ||
|
||
strs.EqualsIgnoreCase(enable, "aliyunOss")
|
||
}
|
||
|
||
// IsOssImageUrl 是否是存放在阿里云oss中的图片
|
||
func IsOssImageUrl(url string) bool {
|
||
host := urls.ParseUrl(config.Instance.Uploader.AliyunOss.Host).GetURL().Host
|
||
return strings.Contains(url, host)
|
||
}
|