golang-dy-back/internal/oss/oss.go
2025-10-28 16:59:41 +08:00

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)
}