mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-04-29 22:11:46 +08:00
s3 minio, cos, oss support
This commit is contained in:
parent
fea3c5358a
commit
29dade90ec
@ -111,6 +111,7 @@ func NewGinRouter(discov discoveryregistry.SvcDiscoveryRegistry, rdb redis.Unive
|
|||||||
|
|
||||||
objectGroup := r.Group("/object", ParseToken)
|
objectGroup := r.Group("/object", ParseToken)
|
||||||
|
|
||||||
|
objectGroup.POST("/part_limit", t.PartLimit)
|
||||||
objectGroup.POST("/part_size", t.PartSize)
|
objectGroup.POST("/part_size", t.PartSize)
|
||||||
objectGroup.POST("/initiateMultipartUpload", t.InitiateMultipartUpload)
|
objectGroup.POST("/initiateMultipartUpload", t.InitiateMultipartUpload)
|
||||||
objectGroup.POST("/authSign", t.AuthSign)
|
objectGroup.POST("/authSign", t.AuthSign)
|
||||||
|
@ -29,6 +29,10 @@ func (o *ThirdApi) SetAppBadge(c *gin.Context) {
|
|||||||
|
|
||||||
// #################### s3 ####################
|
// #################### s3 ####################
|
||||||
|
|
||||||
|
func (o *ThirdApi) PartLimit(c *gin.Context) {
|
||||||
|
a2r.Call(third.ThirdClient.PartLimit, o.Client, c)
|
||||||
|
}
|
||||||
|
|
||||||
func (o *ThirdApi) PartSize(c *gin.Context) {
|
func (o *ThirdApi) PartSize(c *gin.Context) {
|
||||||
a2r.Call(third.ThirdClient.PartSize, o.Client, c)
|
a2r.Call(third.ThirdClient.PartSize, o.Client, c)
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,15 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func (t *thirdServer) PartLimit(ctx context.Context, req *third.PartLimitReq) (*third.PartLimitResp, error) {
|
||||||
|
limit := t.s3dataBase.PartLimit()
|
||||||
|
return &third.PartLimitResp{
|
||||||
|
MinPartSize: limit.MinPartSize,
|
||||||
|
MaxPartSize: limit.MaxPartSize,
|
||||||
|
MaxNumSize: int32(limit.MaxNumSize),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (t *thirdServer) PartSize(ctx context.Context, req *third.PartSizeReq) (*third.PartSizeResp, error) {
|
func (t *thirdServer) PartSize(ctx context.Context, req *third.PartSizeReq) (*third.PartSizeResp, error) {
|
||||||
size, err := t.s3dataBase.PartSize(ctx, req.Size)
|
size, err := t.s3dataBase.PartSize(ctx, req.Size)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -10,6 +10,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type S3Database interface {
|
type S3Database interface {
|
||||||
|
PartLimit() *s3.PartLimit
|
||||||
PartSize(ctx context.Context, size int64) (int64, error)
|
PartSize(ctx context.Context, size int64) (int64, error)
|
||||||
AuthSign(ctx context.Context, uploadID string, partNumbers []int) (*s3.AuthSignResult, error)
|
AuthSign(ctx context.Context, uploadID string, partNumbers []int) (*s3.AuthSignResult, error)
|
||||||
InitiateMultipartUpload(ctx context.Context, hash string, size int64, expire time.Duration, maxParts int) (*cont.InitiateUploadResult, error)
|
InitiateMultipartUpload(ctx context.Context, hash string, size int64, expire time.Duration, maxParts int) (*cont.InitiateUploadResult, error)
|
||||||
@ -34,6 +35,10 @@ func (s *s3Database) PartSize(ctx context.Context, size int64) (int64, error) {
|
|||||||
return s.s3.PartSize(ctx, size)
|
return s.s3.PartSize(ctx, size)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *s3Database) PartLimit() *s3.PartLimit {
|
||||||
|
return s.s3.PartLimit()
|
||||||
|
}
|
||||||
|
|
||||||
func (s *s3Database) AuthSign(ctx context.Context, uploadID string, partNumbers []int) (*s3.AuthSignResult, error) {
|
func (s *s3Database) AuthSign(ctx context.Context, uploadID string, partNumbers []int) (*s3.AuthSignResult, error) {
|
||||||
return s.s3.AuthSign(ctx, uploadID, partNumbers)
|
return s.s3.AuthSign(ctx, uploadID, partNumbers)
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,10 @@ func (c *Controller) PartSize(ctx context.Context, size int64) (int64, error) {
|
|||||||
return c.impl.PartSize(ctx, size)
|
return c.impl.PartSize(ctx, size)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Controller) PartLimit() *s3.PartLimit {
|
||||||
|
return c.impl.PartLimit()
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Controller) GetHashObject(ctx context.Context, hash string) (*s3.ObjectInfo, error) {
|
func (c *Controller) GetHashObject(ctx context.Context, hash string) (*s3.ObjectInfo, error) {
|
||||||
return c.impl.StatObject(ctx, c.HashPath(hash))
|
return c.impl.StatObject(ctx, c.HashPath(hash))
|
||||||
}
|
}
|
||||||
|
@ -50,6 +50,14 @@ func (c *Cos) Engine() string {
|
|||||||
return "tencent-cos"
|
return "tencent-cos"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Cos) PartLimit() *s3.PartLimit {
|
||||||
|
return &s3.PartLimit{
|
||||||
|
MinPartSize: minPartSize,
|
||||||
|
MaxPartSize: maxPartSize,
|
||||||
|
MaxNumSize: maxNumSize,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Cos) InitiateMultipartUpload(ctx context.Context, name string) (*s3.InitiateMultipartUploadResult, error) {
|
func (c *Cos) InitiateMultipartUpload(ctx context.Context, name string) (*s3.InitiateMultipartUploadResult, error) {
|
||||||
result, _, err := c.client.Object.InitiateMultipartUpload(ctx, name, nil)
|
result, _, err := c.client.Object.InitiateMultipartUpload(ctx, name, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -59,6 +59,14 @@ func (m *Minio) Engine() string {
|
|||||||
return "minio"
|
return "minio"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *Minio) PartLimit() *s3.PartLimit {
|
||||||
|
return &s3.PartLimit{
|
||||||
|
MinPartSize: minPartSize,
|
||||||
|
MaxPartSize: maxPartSize,
|
||||||
|
MaxNumSize: maxNumSize,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (m *Minio) InitiateMultipartUpload(ctx context.Context, name string) (*s3.InitiateMultipartUploadResult, error) {
|
func (m *Minio) InitiateMultipartUpload(ctx context.Context, name string) (*s3.InitiateMultipartUploadResult, error) {
|
||||||
uploadID, err := m.core.NewMultipartUpload(ctx, m.bucket, name, minio.PutObjectOptions{})
|
uploadID, err := m.core.NewMultipartUpload(ctx, m.bucket, name, minio.PutObjectOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -53,6 +53,14 @@ func (o *OSS) Engine() string {
|
|||||||
return "ali-oss"
|
return "ali-oss"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (o *OSS) PartLimit() *s3.PartLimit {
|
||||||
|
return &s3.PartLimit{
|
||||||
|
MinPartSize: minPartSize,
|
||||||
|
MaxPartSize: maxPartSize,
|
||||||
|
MaxNumSize: maxNumSize,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (o *OSS) InitiateMultipartUpload(ctx context.Context, name string) (*s3.InitiateMultipartUploadResult, error) {
|
func (o *OSS) InitiateMultipartUpload(ctx context.Context, name string) (*s3.InitiateMultipartUploadResult, error) {
|
||||||
result, err := o.bucket.InitiateMultipartUpload(name)
|
result, err := o.bucket.InitiateMultipartUpload(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -7,6 +7,12 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type PartLimit struct {
|
||||||
|
MinPartSize int64 `json:"minPartSize"`
|
||||||
|
MaxPartSize int64 `json:"maxPartSize"`
|
||||||
|
MaxNumSize int `json:"maxNumSize"`
|
||||||
|
}
|
||||||
|
|
||||||
type InitiateMultipartUploadResult struct {
|
type InitiateMultipartUploadResult struct {
|
||||||
Bucket string `json:"bucket"`
|
Bucket string `json:"bucket"`
|
||||||
Key string `json:"key"`
|
Key string `json:"key"`
|
||||||
@ -103,6 +109,7 @@ type AccessURLOption struct {
|
|||||||
|
|
||||||
type Interface interface {
|
type Interface interface {
|
||||||
Engine() string
|
Engine() string
|
||||||
|
PartLimit() *PartLimit
|
||||||
|
|
||||||
InitiateMultipartUpload(ctx context.Context, name string) (*InitiateMultipartUploadResult, error)
|
InitiateMultipartUpload(ctx context.Context, name string) (*InitiateMultipartUploadResult, error)
|
||||||
CompleteMultipartUpload(ctx context.Context, uploadID string, name string, parts []Part) (*CompleteMultipartUploadResult, error)
|
CompleteMultipartUpload(ctx context.Context, uploadID string, name string, parts []Part) (*CompleteMultipartUploadResult, error)
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -20,6 +20,15 @@ message AuthSignParts {
|
|||||||
repeated SignPart parts = 4;
|
repeated SignPart parts = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message PartLimitReq {
|
||||||
|
}
|
||||||
|
|
||||||
|
message PartLimitResp {
|
||||||
|
int64 minPartSize = 1;
|
||||||
|
int64 maxPartSize = 2;
|
||||||
|
int32 maxNumSize = 3;
|
||||||
|
}
|
||||||
|
|
||||||
message PartSizeReq {
|
message PartSizeReq {
|
||||||
int64 size = 1;
|
int64 size = 1;
|
||||||
}
|
}
|
||||||
@ -100,6 +109,7 @@ message SetAppBadgeResp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
service third {
|
service third {
|
||||||
|
rpc PartLimit(PartLimitReq) returns(PartLimitResp);
|
||||||
rpc PartSize(PartSizeReq) returns(PartSizeResp);
|
rpc PartSize(PartSizeReq) returns(PartSizeResp);
|
||||||
rpc InitiateMultipartUpload(InitiateMultipartUploadReq) returns(InitiateMultipartUploadResp);
|
rpc InitiateMultipartUpload(InitiateMultipartUploadReq) returns(InitiateMultipartUploadResp);
|
||||||
rpc AuthSign(AuthSignReq) returns(AuthSignResp);
|
rpc AuthSign(AuthSignReq) returns(AuthSignResp);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user