搭建一个文件存储服务器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 ...
随机推荐
- CSS & JS Effect – Loading Button
效果 一个按钮, 点击以后中间出现 loading, 然后旋转. 思路 1. 监听点击, hide text, show loading 2. loading 定位中心 3. loading 是通过 ...
- Web核心
JavaWeb 技术栈
- 普元中间件Primeton AppServer6.5部署SuperMap iServer
本文使用Windows环境普元中间件Primeton AppServer6.5(以下简称PAS)部署SuperMap iServer 一.部署前准备 本文使用SuperMap iServer 11.0 ...
- ChatGPT论文降重Prompt
你是一个已经阅读过大量论文的论文写作专家.我正在设计一个基于xxx系统.接下来,我将给你一个论文段落,你可以使用调整句子用词.句子结构等方法,重新描述这段话,对文章的内容进行润色,使之更加接近论文的写 ...
- PHP面试,拼团
如何设计数据库模型来支持拼团功能? 答案:拼团功能涉及到多个用户参与同一团的情况,可以设计以下表结构: Product 表: 存储商品信息,包括商品ID.名称.价格等字段. Group 表: 存储拼团 ...
- 使用composer创建项目时报错:Composer could not find the config file?
使用composer创建项目时报错:Composer could not find the config file:C:\Composer ....? 一般报这个错就是composer安装的时候配置了 ...
- FluxCD 多集群应用的设计与实现
前言 FluxCD 是 CNCF 的孵化项目,可以让我们以 GitOps 的方式轻松地交付应用.和另一个同类的 CNCF 孵化项目 ArgoCD 不同,FluxCD 是许多 toolkit 的集合,天 ...
- redis的CPA三进二原则
CAP C:consistency,数据在多个副本中能保持一致的状态. A:Availability,整个系统在任何时刻都能提供可用的服务,通常达到99.99%四个九可以称为高可用 P:Partiti ...
- 元类、实现ORM
阅读目录: 元类 元类实现ORM 元类 1. 类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段.在Python中这一点仍然成立: >>> class Obj ...
- VueJS实现迷糊查询
原文请查看公共号 前置条件: 开发环境:windows 开发框架:vue2.5 ,vue-cli 4.0+ 编辑器:HbuilderX 兼容版本:vue2.5 Chrome 99.0.4844 ...