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)

    • 获取文件的详细信息(如大小、创建时间等)

设计特点

  1. 异步操作: 所有方法都是异步的,使用 Task 返回类型
  2. 取消令牌支持: 每个方法都支持 CancellationToken,便于操作取消
  3. 类型安全: 使用强类型的返回值如 UploadResultFileAddressFolderResult
  4. 灵活的路径处理: 支持字符串和集合形式的路径参数
  5. 可选参数: 部分方法提供默认参数值,提高易用性

适用场景

这个接口适用于需要与云存储服务交互的应用程序,包括:

  • 文件上传下载系统
  • 内容管理系统
  • 备份和归档系统
  • 媒体文件处理系统

通过实现这个接口,可以为不同的云存储提供商(如又拍云、阿里云OSS、AWS S3等)提供统一的操作接口。

评论加载中...