40 lines
1.5 KiB
Go
40 lines
1.5 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
"file-system/internal/common"
|
|
"io"
|
|
"time"
|
|
)
|
|
|
|
type FileInfo struct {
|
|
Key string
|
|
Size int64
|
|
LastModified time.Time
|
|
ETag string
|
|
}
|
|
|
|
type ListFilesResult struct {
|
|
Files []FileInfo
|
|
NextContinuationToken *string
|
|
}
|
|
|
|
type FileRepository interface {
|
|
UploadFile(ctx context.Context, bucketName string, objectKey string, data io.Reader) error
|
|
DownloadFile(ctx context.Context, bucketName string, objectKey string) (io.ReadCloser, error)
|
|
ListBuckets(ctx context.Context) ([]string, error)
|
|
CreateBucket(ctx context.Context, bucketName string) error
|
|
DeleteBucket(ctx context.Context, bucketName string) error
|
|
ListObjects(ctx context.Context, bucketName string) ([]string, error)
|
|
|
|
// 新增功能
|
|
ListObjectsV2(ctx context.Context, bucketName string, prefix string, maxKeys int32, continuationToken *string) (*ListFilesResult, error)
|
|
GeneratePresignedURL(ctx context.Context, bucketName string, objectKey string, expiry time.Duration) (string, error)
|
|
|
|
// 分片上传
|
|
CreateMultipartUpload(ctx context.Context, bucketName string, objectKey string) (string, error)
|
|
UploadPart(ctx context.Context, bucketName string, objectKey string, uploadId string, partNumber int32, data io.Reader) (string, error)
|
|
CompleteMultipartUpload(ctx context.Context, bucketName string, objectKey string, uploadId string, parts []common.Part) (string, error)
|
|
AbortMultipartUpload(ctx context.Context, bucketName string, objectKey string, uploadId string) error
|
|
}
|