体验.NET与文件存储服务MinIO

对象文件存储服务(OSS)主要用于存储零散的文件,和直接存储到本地文件系统中相比,有以下的几个优势:

  1. 跨服务器可用
  2. 兼容Amazon S3 API
  3. 横向扩容
  4. 高可用
  5. 支持加密

MinIO就是一个高性能的文件服务,我们使用.NET来操作一下。

部署MinIO

最简单的办法,就是在Docker上运行MinIO。可以使用以下命令启动MinIO:

docker run -p 9000:9000 -p 9001:9001 --name minio \
-e "MINIO_ACCESS_KEY=<your-access-key>" \
-e "MINIO_SECRET_KEY=<your-secret-key>" \
minio/minio server /data --console-address ":9001"

其中,<your-access-key><your-secret-key>需要替换为自己的访问密钥和秘密密钥。

.NET操作

需要先安装MinIO的包,直接nuget安装即可:

install-package minio

导入Minio命名空间,并创建一个MinioClient对象。

using Minio;

var endpoint = "localhost:9000";
var accessKey = "<your-access-key>";
var secretKey = "<your-secret-key>";

var minio = new MinioClient minio = new MinioClient()
                                .WithEndpoint("endpoint")
                                .WithCredentials("accessKey", "secretKey")
                                .Build();

连接到MinIO服务器并执行一些基本操作。列出存储桶:

var buckets = await minio.ListBucketsAsync();
foreach (var bucket in buckets)
{
    Console.WriteLine(bucket.Name + " " + bucket.CreationDateDateTime);
}

创建一个新的存储桶:

var args = new MakeBucketArgs().WithBucket(bucketName).WithLocation(loc);
await minio.MakeBucketAsync(args);

上传一个文件:

PutObjectArgs args = new PutObjectArgs().WithBucket(bucketName)
                            .WithFileName(fileName).WithObject(objectName);
await minio.PutObjectAsync(args);

下载文件:

var args = new GetObjectArgs().WithBucket(bucketName).WithObject(objectName)
                            .WithFile(fileName);
await minio.GetObjectAsync(args);

性能测试

经过测试,在本机运行docker的情况下,上传8M的文件,本地运行,上传0.6s,下载0.4s。1.G的文件,上传14s,下载9s。常用网络交换的文件一般不会太大,性能还可以。

原文链接:https://www.cnblogs.com/podolski/p/17334644.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:体验.NET与文件存储服务MinIO - Python技术站

(0)
上一篇 2023年4月24日
下一篇 2023年4月24日

相关文章

  • asp.net core分块上传文件示例

    ASP.NET Core分块上传文件示例 在ASP.NET Core应用程序中,可以使用分块上传文件来上传大文件。在本文中,我们将介绍如何使用ASP.NET Core实现分块上传文件的完整步骤。 步骤一:创建前端页面 在使用ASP.NET Core实现分块上传文件之前,需要先创建前端页面。可以使用HTML和JavaScript创建前端页面。 <!DOC…

    C# 2023年5月16日
    00
  • MASA MinimalAPI源码解析:为什么我们只写了一个app.MapGet,却生成了三个接口

    源码解析:为什么我们只写了一个app.MapGet,却生成了三个接口 1.ServiceBase 1.AutoMapRoute 源码如下: AutoMapRoute自动创建map路由,MinimalAPI会根据service中的方法,创建对应的api接口。 比如上文的一个方法: public async Task<WeatherForecast[]&g…

    C# 2023年5月9日
    00
  • C# JWT权限验证的实现

    让我给您详细讲解关于“C# JWT权限验证的实现”的完整攻略。在此过程中,我将通过以下几个步骤来完成: 安装依赖项 编写授权逻辑代码 创建JWT 验证JWT 以下是每个步骤的详细说明和相应的代码示例: 1. 安装依赖项 在开始之前,您需要安装下列依赖项: Microsoft.AspNetCore.Authentication.JwtBearer:用于令牌验证…

    C# 2023年6月1日
    00
  • C# BackgroundWorker用法详解

    我们来详细讲解一下C#中的BackgroundWorker用法。 一、BackgroundWorker 是什么? 在C#中,BackgroundWorker是一个多线程组件,用于在后台执行一个操作并在主界面上更新相应的进度。它避免了在主线程中直接执行操作而引起的冻结UI界面的问题。 二、BackgroundWorker 的声明 我们使用 Background…

    C# 2023年5月15日
    00
  • C#实现组合排列的方法

    我们知道,组合和排列是组合数学中的两个基本概念。这两个概念经常会在编程中用到,因此在C#中实现它们是非常必要的。 什么是组合? 组合是从n个元素中取出m个元素(m<=n),不考虑元素的顺序,这样的m元组的个数叫做从n个不同元素中取出m个元素的组合数。 组合数的计算公式为C(n,m) = n!/(m! * (n-m)!)。 什么是排列? 排列是从n个元素…

    C# 2023年6月6日
    00
  • Unity3D实验室之iOS真机闪退的解决方法

    下面我来详细讲解“Unity3D实验室之iOS真机闪退的解决方法”的完整攻略。 Unity3D实验室之iOS真机闪退的解决方法 问题描述 在Unity3D开发iOS应用过程中,经常会遇到iOS真机上会出现闪退的情况。这种问题可能由于很多方面引起,需要仔细分析和排查。 本文将从几个方面来讲解如何解决iOS真机闪退问题。 解决方法 1. 清除缓存 有时候我们在测…

    C# 2023年6月3日
    00
  • C#接口(Interface)用法分析

    下面我将详细讲解 C# 接口的语法、用法和应用场景。 一、什么是C#接口 C# 接口是一种抽象类的特殊形式,它定义了一组抽象方法和属性。接口的定义不包含方法或属性的实现,而只定义它们的签名。这意味着它们没有实现,而是主要用于指导开发人员编写类的实现。在各种现代编程语言中,接口的使用非常广泛,C# 中也不例外。 在声明接口时,必须使用 interface 关键…

    C# 2023年6月7日
    00
  • JavaScript ESLint插件保姆级使用教程

    JavaScript ESLint插件保姆级使用教程 1. 什么是ESLint ESLint是一个可扩展的JavaScript代码检查工具。它可以检查代码中的语法错误,提供一致的代码风格,并可以检测代码中的潜在问题。ESLint 可以配置以满足您的特定需求。ESLint内置了很多规则,您也可以通过使用插件来添加自定义规则。 2. 安装ESLint 2.1 安…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部