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);
}