柚子快報(bào)邀請碼778899分享:Minio高性能分布式對象存儲
MinIO是什么?
一種對象存儲解決方案,它是一個(gè)基于
Minio 提供與亞馬遜云科技 S3 兼容的 API,并支持所有核心 S3 功能, 所以也可以看做是S3的開源版本;它允許用戶通過簡單的 API 接口進(jìn)行數(shù)據(jù)的存儲和檢索,同時(shí)提供高度可擴(kuò)展性和強(qiáng)大的數(shù)據(jù)保護(hù)機(jī)制。
MinIo主要是在微服務(wù)系統(tǒng)中使用,非常適合于存儲大容量非結(jié)構(gòu)化的數(shù)據(jù),例如 圖片、視頻、日志文件、備份數(shù)據(jù)和容器/虛擬機(jī)鏡像等,而一個(gè)對象文件可以是任意大小
MinIO特點(diǎn)?
高可用性:MinIO 支持分布式部署,可以在多個(gè)節(jié)點(diǎn)上實(shí)現(xiàn)數(shù)據(jù)冗余和負(fù)載均衡,從而提供高可用性和容錯(cuò)能力。高性能:MinIO 的設(shè)計(jì)目標(biāo)是提供快速的數(shù)據(jù)訪問速度。它采用了高度優(yōu)化的底層存儲引擎,并且支持并行讀寫操作,以滿足大規(guī)模數(shù)據(jù)訪問的需求。可擴(kuò)展性:MinIO 可以根據(jù)實(shí)際需求進(jìn)行水平擴(kuò)展,用戶可以根據(jù)數(shù)據(jù)量的增長來增加節(jié)點(diǎn)數(shù)量,從而實(shí)現(xiàn)存儲容量和性能的擴(kuò)展。數(shù)據(jù)保護(hù):MinIO 提供了多種數(shù)據(jù)保護(hù)機(jī)制,包括數(shù)據(jù)加密、數(shù)據(jù)完整性校驗(yàn)和故障恢復(fù)等。用戶可以根據(jù)需要選擇適當(dāng)?shù)谋Wo(hù)機(jī)制來保障數(shù)據(jù)的安全性和可靠性。兼容性:MinIO 兼容 Amazon S3 云存儲服務(wù)(AWS Signature v2 和 v4) API,這意味著用戶可以直接使用現(xiàn)有的 S3 工具和應(yīng)用程序與 MinIO 進(jìn)行集成,而無需進(jìn)行修改。
MinIO系統(tǒng)搭建
C盤意外盤符創(chuàng)建MinIO文件夾,并在其中創(chuàng)建MinData文件夾,用來存放數(shù)據(jù)
MinIO官網(wǎng)下載MinIO服務(wù)器(Windows版本),下載文件放在MinIO文件夾
配置環(huán)境變量:賬號變量名MINIO_ROOT_USER 變量值:admin密碼變量名MINIO_ROOT_PASSWORD 變量值:admin123
啟動(dòng)MinIO服務(wù)器MinIO文件夾=>cmd=>minio.exe server MinData --console-address ":9001"MinData為存放數(shù)據(jù)文件夾名稱
使用?http://xx.xx.xx.xx:9000進(jìn)入MinIO控制臺頁面
MinIO存儲桶操作查看存儲桶列表
創(chuàng)建存儲桶
查看存儲桶內(nèi)存儲列表
.net 6對接MinIO創(chuàng)建文件上傳WebAPI,創(chuàng)建FileUpload控制器添加NuGet包:Minio、Newtonsoft.Json
MinIO配置
登錄后復(fù)制
private readonly IMinioClient _minioClient;
private string bucketName = "sheepimages";
public FileController()
{
_minioClient = new MinioClient()
.WithEndpoint("10.31.60.18:900")
.WithCredentials("admin", "admin123")
.WithSSL(false);
}
1.2.3.4.5.6.7.8.9.10.
MinIO查看桶列表
登錄后復(fù)制
public async Task
{
ListAllMyBucketsResult? buckets = await _minioClient.ListBucketsAsync().ConfigureAwait(false);
return Ok(buckets);
}
1.2.3.4.5.
封裝檢查存儲桶是否存在方法,因?yàn)槎家玫?/p>
登錄后復(fù)制
///
/// 檢查存儲桶是否存在,如果不存在則創(chuàng)建該存儲桶。
///
/// 要檢查或創(chuàng)建的存儲桶名稱。
///
private async Task EnsureBucketExists(string bucketName)
{
BucketExistsArgs beArgs = new BucketExistsArgs().WithBucket(bucketName);
bool found = await _minioClient.BucketExistsAsync(beArgs).ConfigureAwait(false);
if (!found)
{
MakeBucketArgs mbArgs = new MakeBucketArgs().WithBucket(bucketName);
await _minioClient.MakeBucketAsync(mbArgs).ConfigureAwait(false);
}
}
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.
MinIO上傳單個(gè)文件
登錄后復(fù)制
///
/// 上傳單個(gè)文件到指定的存儲桶。如果存儲桶不存在,將自動(dòng)創(chuàng)建該存儲桶。
///
/// 要上傳的文件,該參數(shù)是一個(gè) IFormFile 類型,表示從 HTTP 請求中上傳的文件。
///
[HttpPost]
public async Task
{
if (file == null || file.Length == 0)
{
return BadRequest("上傳的文件不能為空。"); // 檢查文件是否有效
}
try
{
// 確保存儲桶存在
await EnsureBucketExists(bucketName);
// 為避免文件名沖突,生成唯一的對象名稱
string objectName = Guid.NewGuid().ToString() + "_" + file.FileName;
// 創(chuàng)建上傳對象的參數(shù)
PutObjectArgs poArgs = new PutObjectArgs()
.WithBucket(bucketName)
.WithObject(objectName)
.WithStreamData(file.OpenReadStream())
.WithContentType(file.ContentType)
.WithObjectSize(file.Length);
// 上傳文件到 MinIO
await _minioClient.PutObjectAsync(poArgs).ConfigureAwait(false);
// 創(chuàng)建預(yù)簽名 URL,設(shè)置有效期為7200秒(2小時(shí))
PresignedGetObjectArgs getArgs = new PresignedGetObjectArgs()
.WithBucket(bucketName)
.WithObject(objectName)
.WithExpiry(7200);
// 生成預(yù)簽名 URL
string url = await _minioClient.PresignedGetObjectAsync(getArgs).ConfigureAwait(false);
// 返回包含預(yù)簽名 URL 的 JSON 對象
return Ok(new { url });
}
catch (Exception ex)
{
// 處理異常,返回錯(cuò)誤信息
return StatusCode(500, $"文件上傳失敗: {ex.Message}");
}
}
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.
MinIO上傳多個(gè)文件
登錄后復(fù)制
///
/// 批量上傳文件到指定的存儲桶。如果存儲桶不存在,將自動(dòng)創(chuàng)建該存儲桶。
///
/// 要上傳的文件集合,該參數(shù)是 IFormFileCollection 類型,表示多個(gè)從 HTTP 請求中上傳的文件。
///
[HttpPost] // 改為 POST 方法
public async Task
{
if (formFiles == null || formFiles.Count == 0)
{
return BadRequest("沒有上傳任何文件。"); // 檢查是否上傳了文件
}
try
{
// 確保存儲桶存在
await EnsureBucketExists(bucketName);
List
// 遍歷所有上傳的文件
foreach (IFormFile formFile in formFiles)
{
// 打開文件的讀取流
using Stream? stream = formFile.OpenReadStream();
// 為避免文件名沖突,生成唯一的對象名稱
string? objectName = Guid.NewGuid().ToString() + "_" + formFile.FileName;
// 將文件名稱添加到文件列表中
formFileList.Add(objectName);
// 創(chuàng)建上傳對象的參數(shù)
PutObjectArgs? putArgs = new PutObjectArgs()
.WithBucket(bucketName)
.WithObject(objectName)
.WithStreamData(stream)
.WithContentType(formFile.ContentType)
.WithObjectSize(formFile.Length);
// 上傳文件到 MinIO
await _minioClient.PutObjectAsync(putArgs).ConfigureAwait(false);
}
// 返回上傳成功后的文件名稱列表
return Ok(formFileList);
}
catch (Exception ex)
{
// 處理異常,返回錯(cuò)誤信息
return StatusCode(500, $"文件上傳失敗: {ex.Message}");
}
}
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.
柚子快報(bào)邀請碼778899分享:Minio高性能分布式對象存儲
精彩內(nèi)容
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。