43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
package oss
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
|
|
"github.com/aliyun/aliyun-oss-go-sdk/oss"
|
|
"go-dy/internal/config"
|
|
)
|
|
|
|
type Client struct {
|
|
client *oss.Client
|
|
bucket *oss.Bucket
|
|
endpoint string
|
|
bucketName string
|
|
}
|
|
|
|
func New(cfg config.Config) (*Client, error) {
|
|
if cfg.OSSEndpoint == "" || cfg.OSSAccessKeyID == "" || cfg.OSSAccessKeySecret == "" || cfg.OSSBucket == "" {
|
|
return nil, fmt.Errorf("missing OSS config: endpoint/accessKeyID/accessKeySecret/bucket")
|
|
}
|
|
c, err := oss.New(cfg.OSSEndpoint, cfg.OSSAccessKeyID, cfg.OSSAccessKeySecret)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
b, err := c.Bucket(cfg.OSSBucket)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &Client{client: c, bucket: b, endpoint: cfg.OSSEndpoint, bucketName: cfg.OSSBucket}, nil
|
|
}
|
|
|
|
func (c *Client) Upload(objectKey string, reader io.Reader, contentType string) error {
|
|
var opts []oss.Option
|
|
if contentType != "" {
|
|
opts = append(opts, oss.ContentType(contentType))
|
|
}
|
|
return c.bucket.PutObject(objectKey, reader, opts...)
|
|
}
|
|
|
|
func (c *Client) PublicURL(objectKey string) string {
|
|
return fmt.Sprintf("https://%s.%s/%s", c.bucketName, c.endpoint, objectKey)
|
|
} |