using Dpz.Core.Entity.Base.PublicStruct;
using Dpz.Core.Shard.Service;
namespace Dpz.Core.Service.ObjectStorage.Services;
/// <summary>
/// 对象存储操作
/// </summary>
public interface IObjectStorageOperation
{
/// <summary>
/// 储存筒
/// </summary>
string Bucket { get; }
/// <summary>
/// 上传文件
/// </summary>
/// <param name="stream">文件流</param>
/// <param name="path">文件夹路径</param>
/// <param name="filename">文件名</param>
/// <param name="cancellationToken">传播通知操作应取消的通知令牌</param>
/// <returns></returns>
Task<IFileMetadata> UploadAsync(
Stream stream,
ICollection<string> path,
string filename,
CancellationToken cancellationToken = default
);
/// <summary>
/// 断点续传
/// </summary>
/// <param name="file"></param>
/// <param name="cancellationToken">传播通知操作应取消的通知令牌</param>
/// <returns></returns>
Task<FileAddress?> UploadFileAsync(
CloudFile file,
CancellationToken cancellationToken = default
);
/// <summary>
/// 上传文件
/// </summary>
/// <param name="bytes">bytes</param>
/// <param name="path">文件夹路径</param>
/// <param name="filename">文件名</param>
/// <param name="cancellationToken">传播通知操作应取消的通知令牌</param>
/// <returns></returns>
Task<IFileMetadata> UploadAsync(
byte[] bytes,
List<string> path,
string filename,
CancellationToken cancellationToken = default
);
/// <summary>
/// 下载文件
/// </summary>
/// <param name="pathToFile">路径级文件</param>
/// <param name="cancellationToken">传播通知操作应取消的通知令牌</param>
/// <returns></returns>
Task<Stream> DownloadAsync(string pathToFile, CancellationToken cancellationToken = default);
/// <summary>
/// 下载文件另存为
/// </summary>
/// <param name="pathToFile">路径级文件</param>
/// <param name="path">保存路径</param>
/// <param name="cancellationToken">传播通知操作应取消的通知令牌</param>
/// <returns></returns>
Task SaveAsAsync(string pathToFile, string path, CancellationToken cancellationToken = default);
/// <summary>
/// 删除文件
/// </summary>
/// <param name="pathToFile"></param>
/// <param name="cancellationToken">传播通知操作应取消的通知令牌</param>
/// <returns></returns>
Task DeleteAsync(string? pathToFile, CancellationToken cancellationToken = default);
/// <summary>
/// 获取目录列表文件和文件夹信息
/// </summary>
/// <param name="path">路径</param>
/// <param name="cancellationToken">传播通知操作应取消的通知令牌</param>
/// <returns></returns>
Task<IList<FolderResult>> GetFolderListAsync(
string path,
CancellationToken cancellationToken = default
);
/// <summary>
/// 获取文件信息
/// </summary>
/// <param name="pathToFile"></param>
/// <param name="cancellationToken">传播通知操作应取消的通知令牌</param>
/// <returns></returns>
Task<FileInformation> GetFileInformationAsync(
string pathToFile,
CancellationToken cancellationToken = default
);
/// <summary>
/// 批量上传本地目录下所有文件到远程目录,默认覆盖已有文件
/// </summary>
/// <param name="localDirectory">本地目录路径</param>
/// <param name="remoteDirectory">远程目录路径</param>
/// <param name="bucket">储存桶名称,为 null 时使用当前 <see cref="Bucket"/> 属性</param>
/// <param name="cancellationToken">传播通知操作应取消的通知令牌</param>
/// <returns>成功上传的文件数量</returns>
Task<int> UploadDirectoryAsync(
string localDirectory,
string remoteDirectory,
string? bucket = null,
CancellationToken cancellationToken = default
);
/// <summary>
/// 清理云储存中的空目录(删除没有文件的、以 "/" 结尾的零字节 marker 对象)
/// </summary>
/// <param name="prefix">限定扫描的根前缀,为 null 时扫描整个储存桶</param>
/// <param name="cancellationToken">传播通知操作应取消的通知令牌</param>
/// <returns>删除的空目录数量</returns>
Task<int> CleanEmptyDirectoriesAsync(
string? prefix = null,
CancellationToken cancellationToken = default
);
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
代码解释
这是一个 对象存储服务接口定义,用于定义云存储操作的标准契约。
接口概述
IObjectStorageOperation 接口定义了与对象存储(如阿里云 OSS、AWS S3、MinIO 等)进行交互的核心操作方法。
主要成员
属性
Bucket: 字符串类型,表示当前操作的存储桶(bucket)名称
方法
1. 文件上传方法(3个重载)
UploadAsync(Stream, path, filename)- 从流上传文件
- 参数:文件流、文件夹路径集合、文件名
- 返回:文件元数据信息
UploadFileAsync(CloudFile)- 断点续传功能
- 参数:云文件对象
- 返回:文件地址(可为空)
UploadAsync(byte[], path, filename)- 从字节数组上传文件
- 参数:字节数组、路径列表、文件名
- 返回:文件元数据信息
2. 文件下载方法(2个)
DownloadAsync(pathToFile)- 下载文件到内存流
- 返回:文件流
SaveAsAsync(pathToFile, path)- 下载文件并保存到本地指定路径
3. 文件管理方法
DeleteAsync(pathToFile)- 删除指定路径的文件
GetFileInformationAsync(pathToFile)- 获取文件的详细信息
- 返回:
FileInformation对象
GetFolderListAsync(path)- 获取指定路径下的文件和文件夹列表
- 返回:
FolderResult列表
4. 批量操作方法
UploadDirectoryAsync(localDirectory, remoteDirectory, bucket?)- 批量上传本地目录所有文件到远程目录
- 支持指定不同的存储桶
- 返回:成功上传的文件数量
CleanEmptyDirectoriesAsync(prefix?)- 清理云存储中的空目录
- 删除零字节的目录标记对象
- 返回:删除的空目录数量
设计特点
- 异步设计:所有方法都是异步的(
Task),提高性能 - 支持取消:每个方法都支持
CancellationToken,可优雅取消操作 - 多种上传方式:支持流、字节数组、断点续传等多种场景
- 完整的 CRUD:涵盖创建、读取、删除等基本操作
- 批量操作:支持目录级别的批量上传和清理
这个接口为对象存储服务提供了统一的抽象层,便于在不同云存储提供商之间切换实现。
AI 正在分析代码…
评论加载中...