namespace Oms.Application.Storage;
///
/// 预签名 PUT 直传凭证(前端直接 PUT 到 COS,文件不经后端)。
///
public sealed class PresignedUploadTicket
{
/// 库内应保存的逻辑 key(不含 KeyPrefix)。
public string Key { get; init; } = string.Empty;
/// 一次性 PUT 地址(含签名)。
public string UploadUrl { get; init; } = string.Empty;
public string Method { get; init; } = "PUT";
/// PUT 时必须带上的 Content-Type(若签发时绑定了则必填)。
public string? ContentType { get; init; }
/// PUT 时必须原样携带的请求头。
public IReadOnlyDictionary Headers { get; init; } =
new Dictionary(StringComparer.OrdinalIgnoreCase);
public DateTime ExpireAt { get; init; }
}
///
/// STS 临时密钥直传凭证(前端用 cos-js-sdk 等上传)。
///
public sealed class StsUploadTicket
{
/// 库内应保存的逻辑 key。
public string Key { get; init; } = string.Empty;
/// COS 对象完整键(含 KeyPrefix),SDK putObject 用。
public string CosKey { get; init; } = string.Empty;
public string Bucket { get; init; } = string.Empty;
public string Region { get; init; } = string.Empty;
public string TmpSecretId { get; init; } = string.Empty;
public string TmpSecretKey { get; init; } = string.Empty;
public string SessionToken { get; init; } = string.Empty;
public long StartTime { get; init; }
public long ExpiredTime { get; init; }
}