C#結合Minio實現(xiàn)文件上傳存儲與更新
前言
MinIO是一個開源的對象存儲服務器,專門設計用于在大規(guī)模數(shù)據(jù)存儲環(huán)境中運行。它兼容Amazon S3 API,因此可以作為一個替代方案用于存儲和檢索數(shù)據(jù),特別是用于云存儲和分布式存儲場景。
MinIO的部署非常簡單,在官網(wǎng)下載 Minio.exe,然后使用批處理命令即可部署,非常方便。
C:/Users/admin/Desktop/minio.exe server Z:/Minio/Data/
后面的 Z:/Minio/Data/ 代表Minio存儲的物理位置。
如果需要在C#中對Minio庫進行操作,需要引入對應的Minio庫。

官方的示例代碼在Github上已經(jīng)有了,建議在官網(wǎng)Example中查找對應需要。
這里介紹幾個常用的Minio在C#中的操作方法
1.建立Minio鏈接實例
public bool getMinoConnection(string IP)
{
// "KW5xQbKfmJ787YLGescu", "ANB72EgBqNGTdTGKE8KOad0DbuJ1sZtGCLE81234" 192.168.50.196
// "2MX2wsBGWIklR9EFdamG", "1234T0oLarccqIqc7ef406KWhTT0EkqreaAzELtY" 192.168.10.211
try
{
if (IP == "192.168.50.196" || IP == "192.168.50.195")
{
minioClient = new MinioClient().WithEndpoint("192.168.50.196", 9000)
.WithCredentials("KW5xQbKfmJ787YLGescu", "ANB72EgBqNGTdTGKE8KOad0DbuJ1sZtGCLE81234")
.Build();
}
else if (IP == "192.168.10.211" || IP == "192.168.10.212")
{
minioClient = new MinioClient().WithEndpoint("192.168.10.211", 9000)
.WithCredentials("2MX2wsBGWIklR9EFdamG", "1234T0oLarccqIqc7ef406KWhTT0EkqreaAzELtY")
.Build();
}
}
catch (Exception ex)
{
Console.Out.WriteLine(ex.Message);
return false;
}
return true;
}
2.異步上傳文件
①.主要使用流的方式上傳文件,內(nèi)容以字符串為例
需要注意的是,如果上傳的文件對應的MinioPath地址相同,則文件會直接覆蓋,達到更新的作用
public async Task<bool> UploaderAsync(string IP, string MinioPath, string result)
{
if (getMinoConnection(IP))
{
await Run(minioClient, MinioPath, result);
minioClient.Dispose();
return true;
}
return false;
}
private async Task Run(IMinioClient minio, string MinioPath,string result)
{
var bucketName = "imagestore";
var objectName = MinioPath;
var contentType = "application/text";
byte[] byteArray = Encoding.UTF8.GetBytes(result);
try
{
using (MemoryStream stream = new MemoryStream(byteArray))
{
stream.Position = 0;
// Upload a file to bucket.
var putObjectArgs = new PutObjectArgs()
.WithBucket(bucketName)
.WithObject(objectName)
.WithObjectSize(stream.Length)
.WithStreamData(stream);
await minio.PutObjectAsync(putObjectArgs);
}
}
catch (MinioException e)
{
Console.WriteLine("File Upload Error: {0}", e.Message);
}
}
②.使用本地文件的方式上傳文件
private async Task Run(IMinioClient minio, string FolderName, string FileName, string BaseName)
{
var bucketName = "imagestore";
var objectName = FolderName + "/" + FileName;
var filePath = BaseName;
//var contentType = "application/jpg";
try
{
// Upload a file to bucket.
var putObjectArgs = new PutObjectArgs()
.WithBucket(bucketName)
.WithObject(objectName)
.WithFileName(filePath);
//.WithContentType(contentType);
await minio.PutObjectAsync(putObjectArgs) ;
minio.Dispose();
}
catch (MinioException e)
{
Console.WriteLine("File Upload Error: {0}", e.Message);
}
}
3.下載文件
我這里使用的http請求,你也可以按照官方庫 GetObject去獲取
public async Task<BitmapImage> DoGetFile(string minioheader, int ImgNums, string Ppath)
{
var MinioPath = Ppath.Split('/')[2] + "/" + Ppath.Split('/')[3] + "/images/" + ImgNums.ToString() + "_output_image.jpg";
BitmapImage bitmapImage = new BitmapImage();
using (HttpClient client = new HttpClient())
{
try
{
HttpResponseMessage responseMessage = await client.GetAsync(minioheader + MinioPath);
responseMessage.EnsureSuccessStatusCode();
byte[] imageBytes = await responseMessage.Content.ReadAsByteArrayAsync();
using (MemoryStream memory = new MemoryStream(imageBytes))
{
bitmapImage.BeginInit();
bitmapImage.StreamSource = memory;
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.EndInit();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
return bitmapImage;
}
差不多就這些
以上就是C#結合Minio實現(xiàn)文件上傳存儲與更新的詳細內(nèi)容,更多關于C# Minio文件上傳存儲與更新的資料請關注腳本之家其它相關文章!
相關文章
淺談C# 中 const 與 readonly的核心區(qū)別
在 C# 編程中,const?與?readonly?經(jīng)常被統(tǒng)稱為“常量”,但二者在初始化規(guī)則、編譯/運行時行為、IL 生成方式、版本兼容性、引用類型語義等方面存在本質差異,下面就來詳細的介紹一下,感興趣的可以了解一下2026-05-05
C#使用FileSystemWatcher控件實現(xiàn)的文件監(jiān)控功能示例
這篇文章主要介紹了C#使用FileSystemWatcher控件實現(xiàn)的文件監(jiān)控功能,結合實例形式分析了C# FileSystemWatcher組件的功能及監(jiān)控文件更改情況的具體使用技巧,需要的朋友可以參考下2017-08-08
c# 如何將RadioButton與DataTable數(shù)據(jù)進行綁定
我接觸到的有將兩個控件的數(shù)據(jù)綁定、將控件的屬性與DataTable綁定,以下說說在將DataTable與RadioButton綁定的過程中出現(xiàn)的問題2012-11-11

