feat(storage): add cos support
This commit is contained in:
@@ -3,7 +3,6 @@ package model
|
||||
import (
|
||||
"context"
|
||||
"net/url"
|
||||
"octopus/internal/config"
|
||||
"octopus/internal/dal"
|
||||
"time"
|
||||
|
||||
@@ -37,15 +36,14 @@ type Doc struct {
|
||||
IsDeletable bool `gorm:"column:is_deletable;type:boolean;not null;default:true"` // 是否允许被删除
|
||||
IsEditable bool `gorm:"column:is_editable;type:boolean;not null;default:true"` // 是否允许编辑名称
|
||||
FolderID string `gorm:"column:folder_id;type:varchar;index:idx_folder_id"` // 文件夹ID
|
||||
OSSObjectID string `gorm:"column:oss_object_id;type:varchar"` // OSS Object ID
|
||||
ObjectName string `gorm:"column:object_name;type:varchar"` // 对象存储中对应的object_name
|
||||
CreatedBy string `gorm:"column:created_by;type:varchar;not null"` // 创建人
|
||||
|
||||
Folder *DocFolder `gorm:"foreignKey:FolderID;references:ID"`
|
||||
}
|
||||
|
||||
func (df *Doc) PresignedURL(ctx context.Context) (*url.URL, error) {
|
||||
bucket := config.Get().GetOSSConfig().Bucket
|
||||
return dal.GetMinio().PresignedGetObject(ctx, bucket, df.OSSObjectID, time.Hour, nil)
|
||||
return dal.GetStorage().PresignedGetObject(ctx, df.ObjectName, time.Hour)
|
||||
}
|
||||
|
||||
func (*Doc) TableName() string {
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
package dal
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
"octopus/internal/config"
|
||||
"sync"
|
||||
|
||||
"github.com/minio/minio-go/v7"
|
||||
"github.com/minio/minio-go/v7/pkg/credentials"
|
||||
"github.com/rs/zerolog/log"
|
||||
// pb "github.com/qdrant/go-client/qdrant"
|
||||
)
|
||||
|
||||
var (
|
||||
ossOnce sync.Once
|
||||
ossInstance *minio.Client
|
||||
)
|
||||
|
||||
func GetMinio() *minio.Client {
|
||||
ossOnce.Do(initMinio)
|
||||
return ossInstance
|
||||
}
|
||||
|
||||
func initMinio() {
|
||||
log.Info().Msg("loading minio configs")
|
||||
|
||||
ossConfig, err := url.Parse(config.Get().Databases.OSS)
|
||||
if err != nil {
|
||||
log.Fatal().Err(err).Msg("parse oss config error")
|
||||
}
|
||||
accessSecret, _ := ossConfig.User.Password()
|
||||
// defaultConfig := &model.StorageConfig{
|
||||
// Schema: ossConfig.Scheme,
|
||||
// Endpoint: ossConfig.Host,
|
||||
// AccessID: ossConfig.User.Username(),
|
||||
// AccessSecret: accessSecret,
|
||||
// Bucket: ossConfig.Query().Get("bucket"),
|
||||
// Region: ossConfig.Query().Get("region"),
|
||||
// Secure: cast.ToBool(ossConfig.Query().Get("secure")),
|
||||
// }
|
||||
minioClient, err := minio.New(ossConfig.Host, &minio.Options{
|
||||
Creds: credentials.NewStaticV4(ossConfig.User.Username(), accessSecret, ""),
|
||||
Secure: false,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal().Msgf("minio client init error: %v", err)
|
||||
}
|
||||
|
||||
ossInstance = minioClient
|
||||
}
|
||||
31
internal/dal/storage.go
Normal file
31
internal/dal/storage.go
Normal file
@@ -0,0 +1,31 @@
|
||||
package dal
|
||||
|
||||
import (
|
||||
"octopus/internal/config"
|
||||
"octopus/pkg/storage"
|
||||
"sync"
|
||||
|
||||
"github.com/rs/zerolog/log"
|
||||
// pb "github.com/qdrant/go-client/qdrant"
|
||||
)
|
||||
|
||||
var (
|
||||
storageOnce sync.Once
|
||||
storageInstance storage.ObjectStorage
|
||||
)
|
||||
|
||||
func GetStorage() storage.ObjectStorage {
|
||||
storageOnce.Do(initMinio)
|
||||
return storageInstance
|
||||
}
|
||||
|
||||
func initMinio() {
|
||||
log.Info().Msg("loading minio configs")
|
||||
|
||||
s, err := storage.NewObjectStorage(config.Get().Databases.OSS)
|
||||
if err != nil {
|
||||
log.Fatal().Msgf("storage client init failed: %v", err)
|
||||
}
|
||||
|
||||
storageInstance = s
|
||||
}
|
||||
Reference in New Issue
Block a user