using TakeoutSaaS.Module.Storage.Models;
namespace TakeoutSaaS.Module.Storage.Abstractions;
///
/// 对象存储提供商统一抽象。
///
public interface IObjectStorageProvider
{
///
/// 当前提供商类型。
///
StorageProviderKind Kind { get; }
///
/// 上传文件到对象存储。
///
Task UploadAsync(StorageUploadRequest request, CancellationToken cancellationToken = default);
///
/// 生成预签名直传参数(PUT 或表单直传)。
///
Task CreateDirectUploadAsync(StorageDirectUploadRequest request, CancellationToken cancellationToken = default);
///
/// 生成带过期时间的访问链接。
///
Task GenerateDownloadUrlAsync(string objectKey, TimeSpan expires, CancellationToken cancellationToken = default);
///
/// 生成公共访问地址(可结合 CDN)。
///
string BuildPublicUrl(string objectKey);
}