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