|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package oss
-
- import (
- "fmt"
- "github.com/aliyun/aliyun-oss-go-sdk/oss"
- cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
- "gitlink.org.cn/cloudream/storage/common/pkgs/storage/types"
- "io"
- "log"
- )
-
- type MultiPartUploader struct {
- client *oss.Client
- bucket *oss.Bucket
- }
-
- func NewMultiPartUpload(address *cdssdk.OSSAddress) *MultiPartUploader {
- // 创建OSSClient实例。
- client, err := oss.New(address.Endpoint, address.AK, address.SK)
- if err != nil {
- log.Fatalf("Error: %v", err)
- }
-
- bucket, err := client.Bucket(address.Bucket)
- if err != nil {
- log.Fatalf("Error: %v", err)
- }
-
- return &MultiPartUploader{
- client: client,
- bucket: bucket,
- }
- }
-
- func (c *MultiPartUploader) InitiateMultipartUpload(objectName string) (string, error) {
- imur, err := c.bucket.InitiateMultipartUpload(objectName)
- if err != nil {
- return "", fmt.Errorf("failed to initiate multipart upload: %w", err)
- }
- return imur.UploadID, nil
- }
-
- func (c *MultiPartUploader) UploadPart(uploadID string, key string, partSize int64, partNumber int, stream io.Reader) (*types.UploadPartOutput, error) {
- uploadParam := oss.InitiateMultipartUploadResult{
- UploadID: uploadID,
- Key: key,
- Bucket: c.bucket.BucketName,
- }
- part, err := c.bucket.UploadPart(uploadParam, stream, partSize, partNumber)
- if err != nil {
- return nil, fmt.Errorf("failed to upload part: %w", err)
- }
- result := &types.UploadPartOutput{
- ETag: part.ETag,
- PartNumber: partNumber,
- }
- return result, nil
- }
-
- func (c *MultiPartUploader) CompleteMultipartUpload(uploadID string, Key string, parts []*types.UploadPartOutput) error {
- notifyParam := oss.InitiateMultipartUploadResult{
- UploadID: uploadID,
- Key: Key,
- Bucket: c.bucket.BucketName,
- }
- var uploadPart []oss.UploadPart
- for i := 0; i < len(parts); i++ {
- uploadPart = append(uploadPart, oss.UploadPart{
- PartNumber: parts[i].PartNumber,
- ETag: parts[i].ETag,
- })
- }
- _, err := c.bucket.CompleteMultipartUpload(notifyParam, uploadPart)
- if err != nil {
- return err
- }
- return nil
- }
-
- func (c *MultiPartUploader) AbortMultipartUpload() {
-
- }
-
- func (c *MultiPartUploader) Close() {
- // 关闭client
-
- }
|