搭建一个文件存储服务器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. Google Analytics – GA4 & Tag Manager 概念篇

    前言 当我们设计好网站或者 App 后, 我们要怎样知道这个产品用户是否满意呢? 如果发掘潜在的提升空间呢? 等用户反馈? 投诉? 显然不是上策, 更好的方式是观察. 身为一个产品经理, 我只要看着你 ...

  2. 树状数组 java模板(纯代码)

    public class TrieNums { int n; /*Nums start from 0*/ int[] storage; /*TrieNums index start from 1*/ ...

  3. SpringBoot创建微服务项目

    下载安装并配置git 为自己的git设置名字 git config --global user.name "XXX" 配置自己注册码云的邮箱 git config --global ...

  4. USB3.0与USB2.0编码方式的区别

    首先,USB3.0传输的编码方式和USB2.0本质上是不同的. 1.USB3.0的编码方式 USB 3.0采用的是8b/10b编码方式,由于高速传输,信号干扰的问题,USB 3.0采用 8/10bit ...

  5. Android内存分析命令

    一.内存指标 Item 全称 含义 等价 USS Unique Set Size 物理内存 进程独占的内存 PSS Proportional Set Size 物理内存 PSS= USS+ 按比例包含 ...

  6. linux 基础(1)快速查询指令的用法

    --help 几乎所有的指令,都可以使用--help选项进行查询.给命令使用--help选项,就会直接出现一段说明命令的文字. > date --help 用法:date [选项]... [+格 ...

  7. Effective C++:以const、enum和inline来替换define

    替换define,也就是"以编译器替换预处理器".#define是C语言里的利器,但在C++里有很多取代它的理由. define是预处理的一部分,而不是编译器的一部分,它在编译前就 ...

  8. A星、Floyod、Bellman-Ford

    A 星算法 A 星和 Dijkstra 算法唯一区别在于堆中排序的依据.distance 数组仍然保存实际代价,预估代价只影响堆的弹出顺序. Dijkstra 根据源点到当前点的实际代价进行排序. A ...

  9. 布局(LinearLayout,RelativeLayout,FrameLayout,TableLayout,GridLayout,ConstraintLayout)

    LinearLayout layout_gravity:组件在父容器里的对齐方式 gravity:组件包含的所有子元素的对齐方式 layout_weight:在原有基础上分配剩余空间,一般把layou ...

  10. 需求解决 _针对特定Class设置样式 _CSS _20210906

    需求解决 _针对特定Class设置样式 _CSS _20210906 有一个需求,需要对一些具有 某个Class的标签 ,icon,以及其中的字体设置 隐藏或者展示 解决方法如下:(需要对 该页面引用 ...