using FileService.Domain.ValueObjects; namespace FileService.Application.StorageContracts { /// /// 单次直传命令(小文件,一次性写入,不分片)。 /// /// 储存提供商编号 /// 目标桶;传入公开桶名即落到公开位置 /// 对象 key(含目录前缀) /// 内容类型 /// 文件流 /// 文件大小 public sealed record PutObjectCommand( string ProviderCode, string Bucket, string ObjectKey, string ContentType, Stream Content, long ContentLength); /// /// /// /// 储存提供商编号 /// 储存桶名称 /// 鉴权key /// /// /// public sealed record InitiateUploadCommand( string ProviderCode, string Bucket, string ObjectKey, string ContentType, long ContentLength, IReadOnlyDictionary? Metadata = null); public sealed record InitiateUploadResult( string UploadSessionId, StorageLocation Location); /// /// /// /// /// /// /// /// /// public sealed record GenerateUploadUrlCommand( string ProviderCode, string Bucket, string ObjectKey, string UploadSessionId, int? PartNumber, TimeSpan ExpiresIn); public sealed record PresignedUrl( string Url, string Method, IReadOnlyDictionary Headers, DateTimeOffset ExpiresAt); public sealed record CompleteUploadCommand( string ProviderCode, string Bucket, string Region, string ObjectKey, string UploadSessionId, IReadOnlyList Parts); public sealed record UploadPart( int PartNumber, string ETag, long? Size = null, string? Checksum = null); public sealed record CompleteUploadResult( StorageLocation Location, string? ETag, long Size, string? Checksum = null, string? VersionId = null); }