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<UploadResult> 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<UploadResult> 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>
/// 通过 FTP 批量上传本地目录下所有文件到远程目录,默认覆盖已有文件
/// </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
);
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
这是一个C#接口定义文件,名为 IObjectStorageOperation,用于定义对象存储操作的统一接口规范。让我详细解释一下这个接口的结构和功能:
接口概述
这个接口是为云存储服务(特别是又拍云存储)设计的操作接口,提供了完整的文件管理功能。
主要组成部分
1. 属性
string Bucket { get; }
- 只读属性,表示存储桶名称
- 用于标识云存储中的存储容器
2. 核心功能方法
文件上传功能
UploadAsync(Stream, ICollection<string>, string, CancellationToken)- 通过文件流上传文件
- 支持指定文件路径和文件名
UploadAsync(byte[], List<string>, string, CancellationToken)- 通过字节数组上传文件
- 适用于内存中的文件数据
UploadFileAsync(CloudFile, CancellationToken)- 断点续传功能
- 支持大文件的分块上传和续传
UploadDirectoryAsync(string, string, string?, CancellationToken)- 批量上传整个目录
- 支持FTP方式批量传输
文件下载功能
DownloadAsync(string, CancellationToken)- 下载文件到内存流
SaveAsAsync(string, string, CancellationToken)- 下载文件并保存到指定本地路径
文件管理功能
DeleteAsync(string?, CancellationToken)- 删除指定文件
GetFolderListAsync(string, CancellationToken)- 获取目录下的文件和文件夹列表
GetFileInformationAsync(string, CancellationToken)- 获取文件的详细信息(如大小、创建时间等)
设计特点
- 异步操作: 所有方法都是异步的,使用
Task返回类型 - 取消令牌支持: 每个方法都支持
CancellationToken,便于操作取消 - 类型安全: 使用强类型的返回值如
UploadResult、FileAddress、FolderResult等 - 灵活的路径处理: 支持字符串和集合形式的路径参数
- 可选参数: 部分方法提供默认参数值,提高易用性
适用场景
这个接口适用于需要与云存储服务交互的应用程序,包括:
- 文件上传下载系统
- 内容管理系统
- 备份和归档系统
- 媒体文件处理系统
通过实现这个接口,可以为不同的云存储提供商(如又拍云、阿里云OSS、AWS S3等)提供统一的操作接口。
评论加载中...