搭建一个文件存储服务器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官方示例


using System;
using Minio;
using Minio.Exceptions;
using Minio.DataModel;
using System.Threading.Tasks;
using System.Runtime.Intrinsics.X86;
using System.Reactive.Linq; namespace FileUploader
{
class FileUpload
{
static void Main(string[] args)
{
//var endpoint = "play.min.io";
//var accessKey = "Q3AM3UQ867SPQQA43P2F";
//var secretKey = "zuf+123123";
var accessKey = "Si27eMmz123123B1zf96rmyezz";
var secretKey = "123123";
var endpoint = "421231231238";
try
{
var minio = new MinioClient()
.WithEndpoint(endpoint,9000)
.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 = "filebacket";
var objectName = "Surface_Laptop_Go_003.png";
var filePath = @"C:\Users\Pride\Pictures\Surface_Laptop_Go_003.png";
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 getListBucketsTask = await minio.ListBucketsAsync().ConfigureAwait(false); // 输出bucket列表
foreach (var bucket in getListBucketsTask.Buckets)
{
Console.WriteLine(bucket.Name + " " + bucket.CreationDateDateTime);
} //上传文件到bucket。
//var putObjectArgs = new PutObjectArgs()
// .WithBucket(bucketName)
// .WithObject(objectName)
// .WithFileName(filePath);
// //.WithContentType(contentType);
//var res= await minio.PutObjectAsync(putObjectArgs).ConfigureAwait(false); var listObjectsArgs = new ListObjectsArgs()
.WithBucket(bucketName); //获取bucket里面所有文件
var filelist = await minio.ListObjectsAsync(listObjectsArgs); var expiryInSeconds = 7 * 24 * 60 * 60; // 链接有效期(7天的秒数)
//获取临时预览链接
var args = new PresignedGetObjectArgs()
.WithBucket(bucketName)
.WithObject(objectName)
.WithExpiry(expiryInSeconds);
var aaa = await minio.PresignedGetObjectAsync(args).ConfigureAwait(false);
Console.WriteLine($"文件临时预览链接: {bucketName}"); //var bbb = await minio.GetObjectAsync(args).ConfigureAwait(false); //var bucketName = "your-bucket-name"; // 存储桶名称
//var objectName = "your-object-name"; // 文件名称
//var expiryInSeconds = 3600; // 链接有效期(单位:秒) //var presignedUrl = await _minioClient.PresignedGetObjectAsync(bucketName, objectName, expiryInSeconds);
//Console.WriteLine("浏览链接: " + presignedUrl); Console.WriteLine("Successfully uploaded " + objectName);
}
catch (MinioException e)
{
Console.WriteLine("File Upload Error: {0}", e.Message);
}
}
}
}

直接访问就是失败

参考

docker操作

dOgrpaNx2ayj1iDUHMLq7T2hmj5w7MV44Zh9UNap

run -p 9000:9000 -p 9001:9001 minio/minio server /data --console-address ":9001"

-- 前面为本地路径 /网络路径

docker run -p 9000:9000 -p 9001:9001 -v /docker/minio/data:/data minio/minio server /data --console-address ":9001"

minioadmin

更改密码

搭建一个文件存储服务器minio,实现文件存储的更多相关文章

  1. 三分钟使用webpack-dev-sever搭建一个服务器

    webpack-dev-server是一个小型的Node.js Express服务器,我们可以通过它搭建一个本地服务器,并且实现文件热更新; 1.切换到你的目录下对项目进行初始化 npm init 一 ...

  2. 【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南

    Minio的元数据 数据存储 MinIO对象存储系统没有元数据数据库,所有的操作都是对象级别的粒度的,这种做法的优势是: 个别对象的失效,不会溢出为更大级别的系统失效. 便于实现"强一致性& ...

  3. 第2-1-5章 docker安装MinIO实现文件存储服务-springboot整合minio-minio全网最全的资料

    目录 1. MinIO介绍 2. MinIO应用场景 2.1 单主机单硬盘模式 2.2 单主机多硬盘模式 2.3 多主机多硬盘分布式 3. MinIO特点 4. 存储机制 5. docker安装Min ...

  4. 搭建一个web服务下载HDFS的文件

    需求描述 为了能方便快速的获取HDFS中的文件,简单的搭建一个web服务提供下载很方便快速,而且在web服务器端不留临时文件,只做stream中转,效率相当高! 使用的框架是SpringMVC+HDF ...

  5. 使用python来搭建一个简易的文件下载环境以及用droopy来实现一个文件上传环境

    ubuntu在安装的时候一般都是自带python环境的,大家可以查看一下查看demo如下 用于共享的命令很简单python2: python -m SimpleHTTPServer 8888pytho ...

  6. 跟我一起使用electron搭建一个文件浏览器应用吧(四)

    在软件的世界里面,创建一个新项目很容易,但是坚持将他们开发完成并发布却并非易事.分发软件就是一个分水岭, 分水岭的一边是那些完成的被全世界用户在用的软件,而另外一边则是启动了无数项目却没有一个完成的. ...

  7. 跟我一起使用electron搭建一个文件浏览器应用吧(二)

    这个文件浏览器应用可以具备以下两种功能噢- This file browser application can have the following two functions. 一:用户浏览文件夹和 ...

  8. SpringBoot 搭建基于 MinIO 的高性能存储服务

    1.什么是MinIO MinIO是根据GNU Affero通用公共许可证v3.0发布的高性能对象存储.它与Amazon S3云存储服务兼容.使用MinIO构建用于机器学习,分析和应用程序数据工作负载的 ...

  9. plist文件、NSUserDefault 对文件进行存储的类、json格式解析

    ========================== 文件操作 ========================== Δ一 .plist文件 .plist文件是一个属性字典数组的一个文件: .plis ...

  10. 一个C#解决方案中各文件夹存放了些什么

    在VS2015中"生成"(Build)的过程: Source Code(.cs) -> Compile -> Object File(intermediate file ...

随机推荐

  1. CSS & JS Effect – Loading Button

    效果 一个按钮, 点击以后中间出现 loading, 然后旋转. 思路 1. 监听点击, hide text, show loading 2. loading 定位中心 3. loading 是通过 ...

  2. Web核心

    JavaWeb 技术栈   

  3. 普元中间件Primeton AppServer6.5部署SuperMap iServer

    本文使用Windows环境普元中间件Primeton AppServer6.5(以下简称PAS)部署SuperMap iServer 一.部署前准备 本文使用SuperMap iServer 11.0 ...

  4. ChatGPT论文降重Prompt

    你是一个已经阅读过大量论文的论文写作专家.我正在设计一个基于xxx系统.接下来,我将给你一个论文段落,你可以使用调整句子用词.句子结构等方法,重新描述这段话,对文章的内容进行润色,使之更加接近论文的写 ...

  5. PHP面试,拼团

    如何设计数据库模型来支持拼团功能? 答案:拼团功能涉及到多个用户参与同一团的情况,可以设计以下表结构: Product 表: 存储商品信息,包括商品ID.名称.价格等字段. Group 表: 存储拼团 ...

  6. 使用composer创建项目时报错:Composer could not find the config file?

    使用composer创建项目时报错:Composer could not find the config file:C:\Composer ....? 一般报这个错就是composer安装的时候配置了 ...

  7. FluxCD 多集群应用的设计与实现

    前言 FluxCD 是 CNCF 的孵化项目,可以让我们以 GitOps 的方式轻松地交付应用.和另一个同类的 CNCF 孵化项目 ArgoCD 不同,FluxCD 是许多 toolkit 的集合,天 ...

  8. redis的CPA三进二原则

    CAP C:consistency,数据在多个副本中能保持一致的状态. A:Availability,整个系统在任何时刻都能提供可用的服务,通常达到99.99%四个九可以称为高可用 P:Partiti ...

  9. 元类、实现ORM

    阅读目录: 元类 元类实现ORM 元类 1. 类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段.在Python中这一点仍然成立: >>> class Obj ...

  10. VueJS实现迷糊查询

    原文请查看公共号 前置条件: 开发环境:windows 开发框架:vue2.5 ,vue-cli 4.0+ 编辑器:HbuilderX 兼容版本:vue2.5     Chrome 99.0.4844 ...