搭建一个文件存储服务器minio,实现文件存储
搭建一个文件存储服务器minio,实现文件存储
Minio是一个开源的、自托管的对象存储服务器,它提供了类似于云存储服务的功能。你可以使用Minio搭建自己的私有云存储解决方案,或者作为公共存储服务的替代方案。
安装
根据官网内容进行安装即可。笔者采用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
使用
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,实现文件存储的更多相关文章
- 三分钟使用webpack-dev-sever搭建一个服务器
webpack-dev-server是一个小型的Node.js Express服务器,我们可以通过它搭建一个本地服务器,并且实现文件热更新; 1.切换到你的目录下对项目进行初始化 npm init 一 ...
- 【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
Minio的元数据 数据存储 MinIO对象存储系统没有元数据数据库,所有的操作都是对象级别的粒度的,这种做法的优势是: 个别对象的失效,不会溢出为更大级别的系统失效. 便于实现"强一致性& ...
- 第2-1-5章 docker安装MinIO实现文件存储服务-springboot整合minio-minio全网最全的资料
目录 1. MinIO介绍 2. MinIO应用场景 2.1 单主机单硬盘模式 2.2 单主机多硬盘模式 2.3 多主机多硬盘分布式 3. MinIO特点 4. 存储机制 5. docker安装Min ...
- 搭建一个web服务下载HDFS的文件
需求描述 为了能方便快速的获取HDFS中的文件,简单的搭建一个web服务提供下载很方便快速,而且在web服务器端不留临时文件,只做stream中转,效率相当高! 使用的框架是SpringMVC+HDF ...
- 使用python来搭建一个简易的文件下载环境以及用droopy来实现一个文件上传环境
ubuntu在安装的时候一般都是自带python环境的,大家可以查看一下查看demo如下 用于共享的命令很简单python2: python -m SimpleHTTPServer 8888pytho ...
- 跟我一起使用electron搭建一个文件浏览器应用吧(四)
在软件的世界里面,创建一个新项目很容易,但是坚持将他们开发完成并发布却并非易事.分发软件就是一个分水岭, 分水岭的一边是那些完成的被全世界用户在用的软件,而另外一边则是启动了无数项目却没有一个完成的. ...
- 跟我一起使用electron搭建一个文件浏览器应用吧(二)
这个文件浏览器应用可以具备以下两种功能噢- This file browser application can have the following two functions. 一:用户浏览文件夹和 ...
- SpringBoot 搭建基于 MinIO 的高性能存储服务
1.什么是MinIO MinIO是根据GNU Affero通用公共许可证v3.0发布的高性能对象存储.它与Amazon S3云存储服务兼容.使用MinIO构建用于机器学习,分析和应用程序数据工作负载的 ...
- plist文件、NSUserDefault 对文件进行存储的类、json格式解析
========================== 文件操作 ========================== Δ一 .plist文件 .plist文件是一个属性字典数组的一个文件: .plis ...
- 一个C#解决方案中各文件夹存放了些什么
在VS2015中"生成"(Build)的过程: Source Code(.cs) -> Compile -> Object File(intermediate file ...
随机推荐
- Google Analytics – GA4 & Tag Manager 概念篇
前言 当我们设计好网站或者 App 后, 我们要怎样知道这个产品用户是否满意呢? 如果发掘潜在的提升空间呢? 等用户反馈? 投诉? 显然不是上策, 更好的方式是观察. 身为一个产品经理, 我只要看着你 ...
- 树状数组 java模板(纯代码)
public class TrieNums { int n; /*Nums start from 0*/ int[] storage; /*TrieNums index start from 1*/ ...
- SpringBoot创建微服务项目
下载安装并配置git 为自己的git设置名字 git config --global user.name "XXX" 配置自己注册码云的邮箱 git config --global ...
- USB3.0与USB2.0编码方式的区别
首先,USB3.0传输的编码方式和USB2.0本质上是不同的. 1.USB3.0的编码方式 USB 3.0采用的是8b/10b编码方式,由于高速传输,信号干扰的问题,USB 3.0采用 8/10bit ...
- Android内存分析命令
一.内存指标 Item 全称 含义 等价 USS Unique Set Size 物理内存 进程独占的内存 PSS Proportional Set Size 物理内存 PSS= USS+ 按比例包含 ...
- linux 基础(1)快速查询指令的用法
--help 几乎所有的指令,都可以使用--help选项进行查询.给命令使用--help选项,就会直接出现一段说明命令的文字. > date --help 用法:date [选项]... [+格 ...
- Effective C++:以const、enum和inline来替换define
替换define,也就是"以编译器替换预处理器".#define是C语言里的利器,但在C++里有很多取代它的理由. define是预处理的一部分,而不是编译器的一部分,它在编译前就 ...
- A星、Floyod、Bellman-Ford
A 星算法 A 星和 Dijkstra 算法唯一区别在于堆中排序的依据.distance 数组仍然保存实际代价,预估代价只影响堆的弹出顺序. Dijkstra 根据源点到当前点的实际代价进行排序. A ...
- 布局(LinearLayout,RelativeLayout,FrameLayout,TableLayout,GridLayout,ConstraintLayout)
LinearLayout layout_gravity:组件在父容器里的对齐方式 gravity:组件包含的所有子元素的对齐方式 layout_weight:在原有基础上分配剩余空间,一般把layou ...
- 需求解决 _针对特定Class设置样式 _CSS _20210906
需求解决 _针对特定Class设置样式 _CSS _20210906 有一个需求,需要对一些具有 某个Class的标签 ,icon,以及其中的字体设置 隐藏或者展示 解决方法如下:(需要对 该页面引用 ...