企服版框架中云存储SDK,目前支持阿里云、微软Azure、MiniIO的无缝集成
License
—
Deps
7
Install Size
—
Vulns
✓ 0
Published
Feb 26, 2026
$ dotnet add package TJC.Cyclops.CloudStorageCyclops.CloudStorage是企服版框架中的云存储SDK,提供了统一的云存储访问接口,实现了阿里云、微软Azure和MinIO云存储服务的无缝集成。该项目采用工厂模式设计,使开发者能够使用统一的API访问不同的云存储服务,极大地简化了多平台云存储的开发工作。
提供了统一的云存储操作接口,定义了文件上传、下载、删除等核心功能:
工厂类负责创建和管理云存储客户端实例,实现了单例缓存机制:
定义了支持的云存储服务类型:
提供了详细的云存储配置选项:
可以通过以下方式安装Cyclops.CloudStorage包:
NuGet包管理器:
Install-Package TJC.Cyclops.CloudStorage
.NET CLI:
dotnet add package TJC.Cyclops.CloudStorage
使用Cyclops.CloudStorage需要进行以下配置:
// 创建云存储配置
var cloudStorageOptions = new CloudStorageOptions
{
Id = "your-access-key-id", // 访问密钥ID
Key = "your-access-key-secret", // 访问密钥Secret
SupplierType = EnumSupplierType.Aliyun, // 选择云存储类型
ContainerName = "your-bucket-name", // 存储桶名称
Endpoint = "your-endpoint", // 服务端点
TimeOut = 60, // 超时时间(秒)
MaxErrorRetry = 3 // 最大错误重试次数
};
// 使用工厂创建客户端
var storageClient = CloundStorageClientFactory.Create(cloudStorageOptions);
通过Nacos配置中心配置UploadOptions中的CloudStorageOptions部分。
// 方式一:使用配置对象创建
var options = new CloudStorageOptions
{
Id = "aliyun-access-key-id",
Key = "aliyun-access-key-secret",
SupplierType = EnumSupplierType.Aliyun,
ContainerName = "my-bucket",
Endpoint = "oss-cn-hangzhou.aliyuncs.com"
};
var client = CloundStorageClientFactory.Create(options);
// 方式二:从配置中心自动读取配置
var client = CloundStorageClientFactory.Create();
// 从文件路径上传
await client.UploadAsync("remote-file.jpg", "local-file.jpg");
// 从流上传
using (var stream = new FileStream("local-file.jpg", FileMode.Open))
{
await client.UploadAsync("remote-file.jpg", stream);
}
// 下载文件流(适合大文件)
using (var stream = await client.DownloadAsync("remote-file.jpg"))
{
if (stream != null)
{
using (var fileStream = new FileStream("downloaded-file.jpg", FileMode.Create))
{
await stream.CopyToAsync(fileStream);
}
}
}
// 下载文件内容(适合小文件)
var fileContent = await client.DownloadContentAsync("remote-file.jpg");
if (fileContent != null)
{
await File.WriteAllBytesAsync("downloaded-file.jpg", fileContent);
}
// 删除远程文件
bool success = await client.DeleteAsync("remote-file.jpg");
// 生成24小时内有效的SAS访问链接
var sasUri = await client.GetSasUri("remote-file.jpg", DateTimeOffset.UtcNow.AddHours(24));
// sasUri可用于临时访问文件,无需凭证
// 检查文件是否存在
bool exists = await client.ExistAsync("remote-file.jpg");
var options = new CloudStorageOptions
{
Id = "LTAI5t666666666666666", // AccessKeyId
Key = "66666666666666666666666666666666", // AccessKeySecret
SupplierType = EnumSupplierType.Aliyun,
ContainerName = "my-bucket",
Endpoint = "oss-cn-hangzhou.aliyuncs.com"
};
var options = new CloudStorageOptions
{
Id = "DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=66666666666666666666666666666666==;EndpointSuffix=core.windows.net",
Key = "", // Azure使用连接字符串,Key可为空
SupplierType = EnumSupplierType.Azure,
ContainerName = "my-container",
Endpoint = "https://myaccount.blob.core.windows.net"
};
var options = new CloudStorageOptions
{
Id = "minioadmin", // AccessKey
Key = "minioadmin", // SecretKey
SupplierType = EnumSupplierType.MinIO,
ContainerName = "my-bucket",
Endpoint = "http://localhost:9000"
};
缓存配置:根据需要启用上传/下载缓存,提高性能
options.EnableDownloadCache = true;
options.EnableUploadCache = true;
超时设置:对于大文件传输,适当调整超时时间
options.TimeOut = 300; // 5分钟
错误重试:设置合适的重试次数,提高稳定性
options.MaxErrorRetry = 5;
文件大小处理:大文件优先使用流操作,小文件可以使用字节数组
凭证安全:请妥善保管云存储访问凭证,避免硬编码到代码中,推荐使用配置中心或环境变量
权限管理:确保配置的访问凭证具有足够的权限执行相应操作
错误处理:所有操作都应添加适当的错误处理逻辑,特别是网络相关操作
连接关闭:使用完流后,确保正确关闭,避免资源泄漏
SAS URI安全:SAS URI具有时效性,请根据实际需要设置合适的过期时间
容器创建:确保指定的容器/存储桶已创建,否则可能会导致操作失败
路径格式:云端文件路径应使用斜杠(/)分隔,避免使用反斜杠(\)
保留所有权利