Files

88 lines
2.6 KiB
C#

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