C#系列-使用 Minio 做图片服务器实现图片上传 和下载(13)

1、Minio 服务器下载和安装

要在本地安装和运行 MinIO 服务器,你可以按照以下 步骤进行操作:

  1. 访问 MinIO 的官方网站:https://min.io/,然后 点击页面上的"Download"按钮。

  2. 在下载页面上,选择适合你操作系统的 MinIO 服 务器版本进行下载。MinIO 服务器支持 Windows、Linux 和 MacOS 等操作系统。

  3. 下载完成后,解压缩下载的文件。在 Windows 上,你可以使用压缩软件(如 WinRAR 或 7-Zip)

进行解压缩。在 Linux 和 MacOS 上,你可以使

用命令行工具进行解压缩。

  1. 打开解压缩后的文件夹,你会看到一个名为" minio"(或"minio.exe")的可执行文件。

  2. 在命令行中,进入到 MinIO 服务器所在的文件 夹。

  3. 运行以下命令来启动 MinIO 服务器:

在 Windows 上:

minio.exe server <path_to_data_director y>

minio.exe server d:\tempfile

在 Linux 和 MacOS 上:

./minio server <path_to_data_directory>

<path_to_data_directory>是你想要用作 MinIO 服务器数据存储的文件夹路径。如果指定 的文件夹不存在,MinIO 服务器会自动创建它。

  1. 当 MinIO 服务器成功启动后,你会在命令行中看 到类似以下的输出:

Endpoint: http://127.0.0.1:9000 http://192.

168.1.10:9000

AccessKey: <your_access_key>

SecretKey: <your_secret_key>

...

这些信息包括 MinIO 服务器的访问地址(Endpoint)、 访问密钥(AccessKey)和密钥(SecretKey)。请 记下这些信息,你将在代码中使用它们来连接和操作 MinIO 服务器。

  1. 现在,你可以使用代码来连接和操作 MinIO 服务 器,如前面提供的示例代码所示。

请注意,这只是一个本地安装和运行 MinIO 服务器的 简单示例。在实际应用中,你可能需要进行更多的配 置和安全性设置。你可以参考 MinIO 的官方文档 MinIO Object Storage for Kubernetes --- MinIO Object Storage for Kubernetes

2、图片,视频上传和下载 使用 Minio 创建文件数据库

C#访问MinIO可以通过MinIO的官方.NET SDK来实现。MinIO是一个高性能的对象存储服务器,与Amazon S3兼容。你可以使用MinIO的.NET SDK来上传、下载、列出、删除等操作对象存储中的文件。

首先,你需要在你的C#项目中安装MinIO的.NET SDK。你可以通过NuGet包管理器来安装Minio包。

shell代码

|---|----------------------------------------|
| | Install-Package Minio -Version 版本号 |

或者,如果你使用.NET Core CLI,可以运行:

shell代码

|---|--------------------------------------------|
| | dotnet add package Minio --version 版本号 |

安装完成后,你可以在你的C#代码中这样使用MinIO SDK:

csharp代码

|---|---------------------------------------------------------------------------------------------------------------------------------------------|
| | using Minio; |
| | using System; |
| | using System.IO; |
| | using System.Threading.Tasks; |
| | |
| | class Program |
| | { |
| | static async Task Main(string\[\] args) |
| | { |
| | // MinIO服务器地址、端口、访问密钥和秘密密钥 |
| | var minioClient = new MinioClient("minio.example.com", 9000, "YOUR-ACCESS-KEY", "YOUR-SECRET-KEY"); |
| | |
| | try |
| | { |
| | // 检查存储桶是否存在 |
| | bool isBucketExist = await minioClient.BucketExistsAsync("my-bucket"); |
| | |
| | if (!isBucketExist) |
| | { |
| | // 创建一个新的存储桶 |
| | await minioClient.MakeBucketAsync("my-bucket"); |
| | } |
| | |
| | // 上传一个文件到存储桶 |
| | var putObjectArgs = new PutObjectArgs("my-bucket", "my-objectname", new MemoryStream(System.Text.Encoding.UTF8.GetBytes("Hello, MinIO!"))); |
| | await minioClient.PutObjectAsync(putObjectArgs); |
| | |
| | // 下载文件 |
| | using (var memoryStream = new MemoryStream()) |
| | { |
| | var getObjectArgs = new GetObjectArgs("my-bucket", "my-objectname"); |
| | await minioClient.GetObjectAsync(getObjectArgs, memoryStream); |
| | |
| | memoryStream.Position = 0; |
| | using (var streamReader = new StreamReader(memoryStream)) |
| | { |
| | Console.WriteLine(streamReader.ReadToEnd()); |
| | } |
| | } |
| | |
| | // 列出存储桶中的对象 |
| | var listObjectsArgs = new ListObjectsArgs("my-bucket"); |
| | var objects = await minioClient.ListObjectsAsync(listObjectsArgs); |
| | foreach (var obj in objects) |
| | { |
| | Console.WriteLine($"Object: {obj.Key}, Size: {obj.Size}"); |
| | } |
| | |
| | // 删除对象 |
| | await minioClient.RemoveObjectAsync("my-bucket", "my-objectname"); |
| | } |
| | catch (Exception ex) |
| | { |
| | Console.WriteLine(ex.Message); |
| | } |
| | } |
| | } |

确保替换上面代码中的minio.example.com、9000、YOUR-ACCESS-KEY和YOUR-SECRET-KEY为实际的MinIO服务器地址、端口以及你的访问密钥和秘密密钥。

这个示例代码展示了如何创建MinIO客户端,检查存储桶是否存在,上传和下载文件,列出存储桶中的对象,以及删除对象。

注意:在生产环境中,你应该使用更安全的方式来管理你的访问密钥和秘密密钥,比如使用环境变量或秘密管理工具来存储这些敏感信息。

相关推荐
samble4 小时前
从零搭建灌装监控系统(十):生产追溯,条码触发自动记录
c#·wpf·mvvm·modbus·工业控制
czhc11400756639 小时前
退出防呆:用“总闸“收口所有退出入口,以及三个并发语法坑
开发语言·c#
淡海水12 小时前
02-01-原理篇-Mark-Sweep与变种算法
算法·unity·c#·游戏引擎·.net·gc
UIU11415 小时前
同一个变量在两个 .c 文件里类型不一致,程序会怎样?
c++·学习·c#
波力海苔夹心脆6751 天前
C# 值类型与引用类型详解:存储位置、赋值机制、参数传递、相等比较、装箱拆箱与常见陷阱
开发语言·jvm·经验分享·笔记·c#·.net
估值探索者1 天前
【Python量化策略实战 #02】多因子合成mom和vol两因子打分合成
开发语言·c++·python·数据挖掘·c#
淡海水2 天前
01-04-认知篇-Unity内存全景
unity·c#·游戏引擎·.net·gc
淡海水2 天前
01-03-认知篇-C#内存模型深度解析
unity·c#·游戏引擎·.net·gc
lzhdim2 天前
C#不为人知的10个魔法特性:资深开发者也会震惊的底层奥秘
java·前端·javascript·算法·c#
前端 贾公子2 天前
LangChain核心组件 == 提示词(Prompts)
开发语言·c#