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 }