package ali import ( "context" "path/filepath" "strings" "time" "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss" ) type OSSClient struct { client *oss.Client internalClient *oss.Client config *Config } func (c *OSSClient) GetSavePath(path string) string { return filepath.Join("quyun", strings.Trim(path, "/")) } func (c *OSSClient) GetClient() *oss.Client { return c.client } func (c *OSSClient) PreSignUpload(ctx context.Context, path, mimeType string) (*oss.PresignResult, error) { request := &oss.PutObjectRequest{ Bucket: oss.Ptr(c.config.Bucket), Key: oss.Ptr(c.GetSavePath(path)), ContentType: oss.Ptr(mimeType), } return c.client.Presign(ctx, request) } func (c *OSSClient) Download(ctx context.Context, path, dest string) error { request := &oss.GetObjectRequest{ Bucket: oss.Ptr(c.config.Bucket), Key: oss.Ptr(path), } _, err := c.client.GetObjectToFile(ctx, request, dest) if err != nil { return err } return nil } // GetSignedUrl func (c *OSSClient) GetSignedUrl(ctx context.Context, path string) (string, error) { request := &oss.GetObjectRequest{ Bucket: oss.Ptr(c.config.Bucket), Key: oss.Ptr(path), } preSign, err := c.client.Presign(ctx, request, oss.PresignExpires(time.Minute*5)) if err != nil { return "", err } return preSign.URL, nil } // Delete func (c *OSSClient) Delete(ctx context.Context, path string) error { request := &oss.DeleteObjectRequest{ Bucket: oss.Ptr(c.config.Bucket), Key: oss.Ptr(path), } _, err := c.internalClient.DeleteObject(ctx, request) if err != nil { return err } return nil } // Upload func (c *OSSClient) Upload(ctx context.Context, input, dst string) error { request := &oss.PutObjectRequest{ Bucket: oss.Ptr(c.config.Bucket), Key: oss.Ptr(c.GetSavePath(dst)), } if _, err := c.internalClient.PutObjectFromFile(ctx, request, input); err != nil { return err } return nil }