适用于 .NET Core 的 Backblaze Agent(客户端)是 Backblaze B2 云存储 API 的实现。 Backblaze B2 云存储提供互联网上最便宜的云存储。 Backblaze B2 云存储的价格是其他存储提供商的 1/4。请尝试一下,前 10 GB 存储空间是免费的。
完全支持 Backblaze B2 云存储 API v2,包括文件、帐户、密钥和存储桶。
针对 .NET Standard 2.0 构建,这意味着 Backblaze Agent 可在 Windows、Mac 和 Linux 系统上运行。
与 .NET Core 依赖注入和 HttpClientFactory 无缝集成以实现弹性请求。
使用 MemoryCache 的简单内存中响应缓存。
大文件支持低内存分配和 IProgress 状态。
基于任务的编程模型(异步/等待)的本机支持。
对于功能请求和错误报告,请在 GitHub 上打开问题。
要安装 Backblaze.Agent,请运行以下命令:
> dotnet 添加包 Backblaze.Agent
工作正在进行中!虽然我们鼓励用户使用示例和测试程序,但该项目尚未达到稳定状态。
您将需要key_id和application_key来配置 Backblaze Agent。您可以从 Backblaze B2 云存储门户获取这些内容。有关如何使用此包的示例,请参阅示例项目。
公共无效ConfigureServices(IServiceCollection服务){services.AddBackblazeAgent(选项=> {options.KeyId =“[key_id]”;options.ApplicationKey =“[application_key]”;});}
要获取 backblaze 存储桶的列表,只需将IStorageClient
注入您的类并调用异步客户端即可。
公共类 IndexModel :PageModel{ 私有只读 IStorageClient _storage; 公共IndexModel(IStorageClient存储) { _存储=存储; } [绑定属性] public IEnumerable<BucketItem> 存储桶 { get;私人套装; } 公共异步任务<IActionResult> OnGetAsync() {Buckets = wait _storage.Buckets.GetAsync();if (Buckets == null){ return NotFound();}return Page(); }}
安装以下软件包:
> dotnet 添加包 Backblaze.Client> dotnet 添加包 Microsoft.Extensions.Caching.Memory> dotnet 添加包 Microsoft.Extensions.Logging.Debug
示例代码:
课程计划{ 私有静态 IStorageClient 客户端; 静态异步任务 Main(string[] args) {尝试{ var options = new ClientOptions(); var loggerFactory = LoggerFactory.Create(builder => {builder .AddFilter("Bytewizer.Backblaze", LogLevel.Trace) .AddDebug(); }); var cache = new MemoryCache(new MemoryCacheOptions()); Client = new BackblazeClient(选项, loggerFactory, 缓存); 等待 Client.ConnectAsync("[key_id]", "[application_key]"); varbuckets=awaitClient.Buckets.GetAsync(); foreach (var Bucket in Bucket)Console.WriteLine($"存储桶名称:{bucket.BucketName} - 类型:{bucket.BucketType}"); }catch (异常){ Console.Error.WriteLine(ex.Message);} }}
安装以下软件包:
> dotnet 添加包 Backblaze.Client
示例代码:
课程计划{ 私有静态 IStorageClient 客户端; 静态无效主(字符串[]参数) {尝试{ 客户端 = new BackblazeClient(); Client.Connect("[key_id]", "[application_key]"); var Buckets = Client.Buckets.GetAsync().GetAwaiter().GetResult(); foreach (var Bucket in Bucket)Console.WriteLine($"存储桶名称:{bucket.BucketName} - 类型:{bucket.BucketType}");}catch (Exception ex){ Console.Error.WriteLine(ex.Message); } }}
上传文件流
foreach (Directory.GetFiles(@"c:mydirectory")) 中的 var filePath 使用 (var Stream = File.OpenRead(filePath)) {var results = wait Client.UploadAsync("[BucketId]", new FileInfo(filePath).Name, stream); }}
下载文件流
var files = new string[] { @"c:mydirectoryfile1.txt", "file2.bat" };foreach (var fileName in files){ 使用 (var Stream = File.Create(文件名)) { var results = wait Client.DownloadAsync("[BucketName]", 文件名, 流); }}
安装 Microsoft.Extensions.Logging 包:
> dotnet 添加包 Microsoft.Extensions.Logging.Debug
可以使用以下代码启用对调试窗口的跟踪:
services.AddLogging(builder =>{builder.AddDebug();builder.AddFilter("Bytewizer.Backblaze", LogLevel.Trace);});
services.AddBackblazeAgent(选项=>{ options.KeyId = "[key_id]"; options.ApplicationKey = "[application_key]";});
下表描述了可用的代理选项:
选项名称 | 默认 | 描述 |
---|---|---|
密钥ID | --- | 必需- 用于身份验证的密钥标识符。 |
应用密钥 | --- | 必需- 用于身份验证的密钥的秘密部分。 |
处理程序生命周期 | 600 | 消息处理程序实例可以重用的时间(以秒为单位)。 |
暂停 | 600 | 客户端请求超时之前等待的时间(以秒为单位)。 |
重试次数 | 5 | 客户端在超时之前重试失败请求的次数。 |
请求最大并行数 | 10 | 建立的并行请求连接的最大数量。 |
下载最大并行数 | 5 | 建立的并行下载连接的最大数量。 |
下载截止尺寸 | 100MB | 用于切换到分块部分的下载截止大小(以字节为单位)。 |
下载零件尺寸 | 100MB | 下载分块部分的部分大小(以字节为单位)。 |
上传最大并行数 | 3 | 建立的最大并行上传连接数。 |
上传截止大小 | 100MB | 上传切换到分块部分的截止大小(以字节为单位)。 |
上传部分大小 | 100MB | 上传分块部分的大小(以字节为单位)。 |
自动设置零件尺寸 | 错误的 | 使用 Backblaze 服务返回的推荐零件尺寸。 |
校验和禁用 | 错误的 | 这仅供测试使用,不建议用于生产环境。 |
测试模式 | --- | 这仅供测试使用,不建议用于生产环境。 |
services.AddBackblazeAgent(选项=>{ // 这仅供测试使用,不建议用于生产环境。 options.TestMode = "fail_some_uploads"; });
以下测试模式选项可用于验证您的代码是否正确处理错误情况。
选项字符串 | 描述 |
---|---|
上传失败 | 随机上传失败或被服务拒绝。 |
expire_some_account_authorization_tokens | 随机帐户授权令牌过期。 |
超出强制上限 | 强制超出上限条件。 |
您将需要key_id和application_key来配置 Backblaze Test Agent settings.json 文件。
该项目的所有源代码、文档、说明和产品均按原样提供,不提供任何保证。对于因使用而产生的任何损坏、数据丢失或费用,我们不承担任何责任。
master - 这是包含最新版本的分支 - 不应直接对此分支做出贡献。
开发- 这是开发分支,贡献者应将贡献作为拉取请求提出。该开发分支将定期合并到主分支,并发布到NuGet Gallery。
我们始终欢迎对该项目做出贡献。请考虑在 GitHub 上分叉此项目并发送拉取请求,以将您的改进添加到原始项目中。