首页 > 更多教程 > 手把手教你搭建一个文件存储服务器minio,实现文件存储
2024
04-27

手把手教你搭建一个文件存储服务器minio,实现文件存储

Minio是一个开源的、自托管的对象存储服务器,它提供了类似于云存储服务的功能。你可以使用Minio搭建自己的私有云存储解决方案,或者作为公共存储服务的替代方案。

安装

官网:https://min.io/download

根据官网内容进行安装即可。笔者采用windos 本地安装的方式

安装好后就能看到账号和密码了。默认的为 miniadmin 登录地址为:http://127.0.0.1:9001/

默认的管理控制台端口是9001 客户端的请求的端口是9000

PS> setx MINIO_ROOT_USER admin

PS> setx MINIO_ROOT_PASSWORD 123456 ps> minio.exe server D:\minio\Data --console-address ":9001"

知识点

  • • Bucket(存储桶):Bucket 是 Minio 的最顶层命名空间,类似于文件系统中的文件夹。在 Minio 中,你可以创建多个 Bucket 来组织和管理对象。
  • • Object(对象):Object 是 Minio 存储的实际数据单元。每个 Object 可以是任意大小的文件,通常由文件内容、元数据和一个唯一标识符(Object Key)组成。
  • • Object Key(对象键):Object Key 是每个 Object 的唯一标识符,用于区分不同的 Object。它类似于文件系统中的文件路径,由目录结构和文件名称组成,例如 "photos/2021/image.jpg"。
  • • Presigned URL(预签名URL):Presigned URL 是一种带有临时访问权限的 URL,通过该 URL 可以让用户在一定时间内对特定的 Object 进行读取、写入、删除等操作。这对于授权临时访问非常有用,比如与其他用户共享文件或资源。
  • • Access Key 和 Secret Key(访问密钥):Access Key 和 Secret Key 是用于身份验证的凭据。Access Key 用于标识用户或应用程序,而 Secret Key 则用于进行身份验证。这些凭据需要在使用 Minio 客户端或访问 Minio API 时进行配置。
  • • Region(区域):Region 是用来表示存储桶(Bucket)在物理位置上的分布。Minio 支持将数据存储在不同的区域,以实现高可用性和数据冗余。
  • • Encryption(加密):Minio 提供了对 Bucket 和 Object 的服务器端加密功能。可以使用客户端提供的加密选项,将数据在上传到 Minio 之前进行加密,以保证数据的机密性。
  • • Endpoint 对象存储服务的URL
使用

最简单的办法参考Asp.Net Core 5.0/6.0对象储存扩展包,支持Minio自建对象储存、阿里云OSS、腾讯云COS、七牛云Kodo。支持OSS常规操作,比如储存桶创建,删除、对象上传、下载、生成签名URL等。支持.NET 5/6,也推荐升级至.NET 5/6.

DotNet官方示例 static void Main(string[] args)

{

var endpoint = "play.min.io";

var accessKey = "Q3AM3UQ867SPQQA43P2F";

var secretKey = "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG";

try

{

var minio = new MinioClient

.WithEndpoint(endpoint)

.WithCredentials(accessKey, secretKey)

.WithSSL

.Build;

FileUpload.Run(minio).Wait;

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

}

Console.ReadLine;

}

// File uploader task.

private async static Task Run(MinioClient minio)

{

var bucketName = "mymusic";

var location = "us-east-1";

var objectName = "0.png";

var filePath = "C:\\Users\\Pride\\Pictures\\0.png";

//var contentType = "application/zip";

try

{

// 在服务器上创建一个bucket(如果还没有)。

var beArgs = new BucketExistsArgs

.WithBucket(bucketName);

//是否存在bucket

bool found = await minio.BucketExistsAsync(beArgs).ConfigureAwait(false);

if (!found)

{

var mbArgs = new MakeBucketArgs

.WithBucket(bucketName);

await minio.MakeBucketAsync(mbArgs).ConfigureAwait(false);

}

//上传文件到bucket。

var putObjectArgs = new PutObjectArgs

.WithBucket(bucketName)

.WithObject(objectName)

.WithFileName(filePath);

//.WithContentType(contentType);

var res= await minio.PutObjectAsync(putObjectArgs).ConfigureAwait(false);

Console.WriteLine("Successfully uploaded " + objectName);

}

catch (MinioException e)

{

Console.WriteLine("File Upload Error: {0}", e.Message);

}

}

上传成功

直接访问就是失败



最后编辑:
作者:萌小白
一个热爱网络的青年!

发布评论

表情