C#結(jié)合Minio實(shí)現(xiàn)文件上傳存儲與更新
前言
MinIO是一個開源的對象存儲服務(wù)器,專門設(shè)計(jì)用于在大規(guī)模數(shù)據(jù)存儲環(huán)境中運(yù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庫進(jìn)行操作,需要引入對應(yīng)的Minio庫。
官方的示例代碼在Github上已經(jīng)有了,建議在官網(wǎng)Example中查找對應(yīng)需要。
這里介紹幾個常用的Minio在C#中的操作方法
1.建立Minio鏈接實(shí)例
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)容以字符串為例
需要注意的是,如果上傳的文件對應(yīng)的MinioPath地址相同,則文件會直接覆蓋,達(dá)到更新的作用
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#結(jié)合Minio實(shí)現(xiàn)文件上傳存儲與更新的詳細(xì)內(nèi)容,更多關(guān)于C# Minio文件上傳存儲與更新的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#?CefSharp?根據(jù)輸入日期段自動選擇日期的操作代碼
這篇文章主要介紹了C#?CefSharp?根據(jù)輸入日期段自動選擇日期的操作代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01C#基于TCP實(shí)現(xiàn)簡單游戲客戶端的完整實(shí)例
這篇文章主要給大家介紹了關(guān)于C#基于TCP實(shí)現(xiàn)簡單游戲客戶端的相關(guān)資料,通過本文介紹的方法可以直接實(shí)現(xiàn)游戲客戶端,是個非常適合學(xué)習(xí)的實(shí)例需要的朋友可以參考下2021-11-11Unity Shader實(shí)現(xiàn)黑幕過場效果
這篇文章主要為大家詳細(xì)介紹了Unity Shader實(shí)現(xiàn)黑幕過場效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07基于C#技術(shù)實(shí)現(xiàn)身份證識別功能
這篇文章主要介紹了基于C#技術(shù)實(shí)現(xiàn)身份證識別功能的相關(guān)資料,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07