استفاده از minio SDK برای تعامل با آبجکت استوریج Minio
برای ذخیره سازی فایلهای وب سایت یا اپلیکیشنتان در آبجکت استوریج با رابط کاربری Minio با استفاده از SDK (Software Developers Kit) هایی که برای زبانهای مختلف برنامه نویسی و فریموورک های مختلف برنامه نویسی وجود دارد، سریعتر، سامانه ذخیره سازی و گردش دادهی اختصاصی خودتان را پیاده سازی خواهید کرد.
با مقبولیتی که سرویس ذخیره سازی آبجکتی آمازون با ساختار Simple Storage Service یا به اختصار S3 در بین توسعه دهندگان پیدا کرد SKD های زبان های مختلف برنامه نویسی هم برای تعامل سادهتر و توسعه پرسرعت در دسترس برنامه نویسان وب و موبایل قرارگرفت. همین مقبولیت باعث شد که دیگر سرویسهای ذخیره سازی ابری هم همین ساختار آمازون را در Cloud Storage خود پیاده سازی کنند و سرویس S3-compatible مشابه آمازون را به کاربران ارائه دهند.
در ذخیره ساز ابری پشتیبان هم با ایجاد پارتیشن S3-compatible پشتیبان میتوانید مجموعهی کاملی از ابزارهای آماده برای اتصال وب سایت، برنامه کاربردی، Game و سامانه آنلاینتان به فضای ابری پشتیبان استفاده کنید. درصورتی که فضای ابری شما با استفاده از minio سرور ایجاد شده باشد یا رابط کاربری minio داشته باشد (مثل پارتیشن های s3 minio پشتیبان) میتوانید از این sdk ها برای اتصال و تعامل با فضای ابری استفاده کنید.
در این نوشتار، به صورت لیست وار برخی از این ابزارها را با مثال آپلود فایل در فضای ابری، برای زبان های برنامه نویسی و فریم وورک های مختلف برنامه نویسی معرفی خواهیم کرد. اما پیش از آن خیلی کوتاه برای شما توضیح میدهیم که مزیای فضای ابری S3-compatible پشتیبان چیست.
ذخیره سازی فایلهایتان در فضای ابری پشتیبان چه مزایا و امکاناتی دارد؟
- ذخیره سازی حداقل سه نسخه از هر فایل در فضای ابری پشتیبان
- امکان انتخاب موقعیت مکانی آسیا(ایران) و اروپا(آلمان، هلند و فنلاند) برای پارتیشن S3-compatible
- پرداخت هزینه به ریال
- ارزانتر از هر سرویس ذخیره سازی آبجکتی (Object Storage) داخلی و خارجی
- API اختصاصی توسعه داده شده در پشتیبان (Sidecar) که ابزارهایی برای ریموت آپلود، فشرده سازی و اکسترکت، Video/Audio Encoding، Image Manipulation و Server Side Encryption در اختیار شما قرار میدهد.
- استفاده از کلاینت Minio برای تعامل با فضای ابری پشتیبان که مجموعه ی کاملی از SDK های زبان های مختلف برنامه نویسی را هم به همراه خود دارد.
- امکان استفاده از SDK های آمازون S3 و سرویس های دیگر ذخیره سازی ابری با ساختار S3-compatible
قدم اول: پیشنیازها و راهاندازی
با ثبت نام در پتشیبان کافی است با استفاده از دکمه خرید فضای بیشتر یک پارتیشن S3 در پشتیبان ایجاد کنید. سپس کافیست کلاینت MC (Minio Client) را روی سیستمتان نصب کنید و به پارتیشن متصل شوید در مثال های بعدی هر جا Key، Secret، Endpoint، Bucket ذکر شده بود اطلاعات دسترسی و آدرس اندپوینت و نام باکتتان در پارتیشن S3 پشتیبان را وارد کنید. برای قدم اول راهنمای پارتیشن S3 Compatible پشتیبان را بخوانید.
استفاده از MinIO JAVA SDK در پارتیشن S3 پشتیبان
https://docs.min.io/docs/java-client-quickstart-guide.html
حداقل نسخه مورد نیاز JAVA 1.8 و بالاتر
در این مثال از سرور رایگان MinIO با آدرس https://play.min.io استفاده شده است. میتوانید به رایگان از این سرور برای تست استفاده کنید یا آدرس اند پونیت و کلید دسترسی و کلید خصوصی و باکت پارتیشن S3 پشتیبانتان را به جای انها استفاده کنید.
FileUploader.java
import io.minio.BucketExistsArgs; import io.minio.MakeBucketArgs; import io.minio.MinioClient; import io.minio.UploadObjectArgs; import io.minio.errors.MinioException; import java.io.IOException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; public class FileUploader { public static void main(String[] args) throws IOException, NoSuchAlgorithmException, InvalidKeyException { try { // Create a minioClient with the MinIO server playground, its access key and secret key. MinioClient minioClient = MinioClient.builder() .endpoint("https://play.min.io") .credentials("Q3AM3UQ867SPQQA43P2F", "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG") .build(); // Make 'asiatrip' bucket if not exist. boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket("asiatrip").build()); if (!found) { // Make a new bucket called 'asiatrip'. minioClient.makeBucket(MakeBucketArgs.builder().bucket("asiatrip").build()); } else { System.out.println("Bucket 'asiatrip' already exists."); } // Upload '/home/user/Photos/asiaphotos.zip' as object name 'asiaphotos-2015.zip' to bucket // 'asiatrip'. minioClient.uploadObject( UploadObjectArgs.builder() .bucket("asiatrip") .object("asiaphotos.zip") .filename("/home/user/Photos/asiaphotos.zip") .build()); System.out.println( "'/home/user/Photos/asiaphotos.zip' is successfully uploaded as " + "object 'asiaphotos-2015.zip' to bucket 'asiatrip'."); } catch (MinioException e) { System.out.println("Error occurred: " + e); } } }
Compile FileUploader
$ javac -cp minio-8.0.0-all.jar FileUploader.java
Run FileUploader
$ java -cp minio-8.0.0-all.jar:. FileUploader '/home/user/Photos/asiaphotos.zip' is successfully uploaded as object 'asiaphotos-2015.zip' to bucket 'asiatrip'. $ mc ls play/asiatrip/ [2016-06-02 18:10:29 PDT] 82KiB asiaphotos-2015.zip
ارجاعات بیشتر:
استفاده از MinIO Go Client SDK در پارتیشن S3 پشتیبان
MinIO GO Client SDK یک API ساده برای تعامل با پارتیشن S3 پشتیبان در اختیار شما قرار میدهد. دراین راهنمای کوتاه خواهید دید چکونه کلاینت را نصب کنید و به پارتیشن S3 متصل شوید و یک آپلودر ساده را پیاده سازی کنید. برای لیست کامل API ها و مثال های بیشتر به اینجا مراجعه کنید.
در این مستند فرض شده است که شما با اکوسیستم توسعه دهندگان GO کار میکنید.
دانلود از گیتهاب:
GO111MODULE=on go get github.com/minio/minio-go/v7
نصب کلاینت MinIO:
package main import ( "log" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" ) func main() { endpoint := "play.min.io" accessKeyID := "Q3AM3UQ867SPQQA43P2F" secretAccessKey := "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG" useSSL := true // Initialize minio client object. minioClient, err := minio.New(endpoint, &minio.Options{ Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""), Secure: useSSL, }) if err != nil { log.Fatalln(err) } log.Printf("%#v\n", minioClient) // minioClient is now set up }
در این مثال از سرور رایگان MinIO با آدرس https://play.min.io استفاده شده است. میتوانید به رایگان از این سرور برای تست استفاده کنید یا آدرس اند پونیت و کلید دسترسی و کلید خصوصی و باکت پارتیشن S3 پشتیبانتان را به جای آنها استفاده کنید.
FileUploader.go
package main import ( "context" "log" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" ) func main() { ctx := context.Background() endpoint := "play.min.io" accessKeyID := "Q3AM3UQ867SPQQA43P2F" secretAccessKey := "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG" useSSL := true // Initialize minio client object. minioClient, err := minio.New(endpoint, &minio.Options{ Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""), Secure: useSSL, }) if err != nil { log.Fatalln(err) } // Make a new bucket called mymusic. bucketName := "mymusic" location := "us-east-1" err = minioClient.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{Region: location}) if err != nil { // Check to see if we already own this bucket (which happens if you run this twice) exists, errBucketExists := minioClient.BucketExists(ctx, bucketName) if errBucketExists == nil && exists { log.Printf("We already own %s\n", bucketName) } else { log.Fatalln(err) } } else { log.Printf("Successfully created %s\n", bucketName) } // Upload the zip file objectName := "golden-oldies.zip" filePath := "/tmp/golden-oldies.zip" contentType := "application/zip" // Upload the zip file with FPutObject n, err := minioClient.FPutObject(ctx, bucketName, objectName, filePath, minio.PutObjectOptions{ContentType: contentType}) if err != nil { log.Fatalln(err) } log.Printf("Successfully uploaded %s of size %d\n", objectName, n) }
Run FileUploader
export GO111MODULE=on go run file-uploader.go 2016/08/13 17:03:28 Successfully created mymusic 2016/08/13 17:03:40 Successfully uploaded golden-oldies.zip of size 16253413 mc ls play/mymusic/ [2016-05-27 16:02:16 PDT] 17MiB golden-oldies.zip
ارجاعات کامل API
مستندات کامل:
https://docs.min.io/docs/golang-client-quickstart-guide.html
استفاده از پایتون و کتابخانه MinIO Python Library در پارتیشن S3 پشتیبان
MinIO Python Client SDK یک API ساده برای تعامل با پارتیشن S3 پشتیبان در اختیار شما قرار میدهد. دراین راهنمای کوتاه خواهید دید چکونه کلاینت را نصب کنید و به پارتیشن S3 متصل شوید و یک برنامه ساده پایتون را اجرا کنید. برای لیست کامل API ها و مثال های بیشتر به اینجا مراجعه کنید.
در این مستند فرض شده است که شما در حال کار با تنظیمات پایتون در محل هستید.
نسخه مورد نیاز Python 2.7 و بالاتر
نکته مهم هنگام استفاده همزمان:هنگام استفاده از کتابخانه threading پایتون آبجکت MinIO برای یک نخ (thread) امن است. اما به طور مشخص استفاده از پروسسهای چند گانه به عنوان مثال وقتی از multiprocessing.Pool استفاده میکنید امن نیست. راهکار اینست که، به سادگی، برای هر پروسس یک آبجک Minio «جدید» بسازید و آن را بین پروسس ها به صورت مشترک استفاده نکنید.
در این مثال برنامه به پارتیشن S3 و Object Storage متصل شده یک باکت می سازد و یک فایل را در باکت بارگذاری میکند. برای این مثال از سرور رایگان MinIO با آدرس https://play.min.io استفاده شده است. میتوانید به رایگان از این سرور برای تست استفاده کنید یا آدرس اند پونیت و کلید دسترسی و کلید خصوصی و باکت پارتیشن S3 پشتیبانتان را به جای آنها استفاده کنید.
file-uploader.py
# Import MinIO library. from minio import Minio from minio.error import (ResponseError, BucketAlreadyOwnedByYou, BucketAlreadyExists) # Initialize minioClient with an endpoint and access/secret keys. minioClient = Minio('play.min.io', access_key='Q3AM3UQ867SPQQA43P2F', secret_key='zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG', secure=True) # Make a bucket with the make_bucket API call. try: minioClient.make_bucket("maylogs", location="us-east-1") except BucketAlreadyOwnedByYou as err: pass except BucketAlreadyExists as err: pass except ResponseError as err: raise # Put an object 'pumaserver_debug.log' with contents from 'pumaserver_debug.log'. try: minioClient.fput_object('maylogs', 'pumaserver_debug.log', '/tmp/pumaserver_debug.log') except ResponseError as err: print(err)
Run file-uploader
python file_uploader.py mc ls play/maylogs/ [2016-05-27 16:41:37 PDT] 12MiB pumaserver_debug.log
ارجاعات کامل API در اینجا در دسترس شماست:
مستندات کامل SDK پایتون
https://docs.min.io/docs/python-client-quickstart-guide.html
استفاده از جاوا اسکریپت و کتابخانه MinIO JavaScript Library در پارتیشن S3 پشتیبان
MinIO JavaScript Client SDK یک API ساده برای تعامل با پارتیشن S3 پشتیبان در اختیار شما قرار میدهد. دراین راهنمای کوتاه خواهید دید چکونه کلاینت را نصب کنید و به پارتیشن S3 متصل شوید و یک برنامه ساده پایتون را اجرا کنید. برای لیست کامل API ها و مثال های بیشتر به اینجا مراجعه کنید.
در این مستند فرض شده است node.js در محل نصب شده است.
در این مثال برنامه به پارتیشن S3 و Object Storage متصل شده یک باکت می سازد و یک فایل را در باکت بارگذاری میکند. برای این مثال از سرور رایگان MinIO با آدرس https://play.min.io استفاده شده است. میتوانید به رایگان از این سرور برای تست استفاده کنید یا تست خودتان را با استفاده از آدرس اند پونیت و کلید دسترسی و کلید خصوصی و باکت پارتیشن S3 پشتیبانتان اجرا کنید.
file-uploader.js
var Minio = require('minio') // Instantiate the minio client with the endpoint // and access keys as shown below. var minioClient = new Minio.Client({ endPoint: 'play.min.io', port: 9000, useSSL: true, accessKey: 'Q3AM3UQ867SPQQA43P2F', secretKey: 'zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG' }); // File that needs to be uploaded. var file = '/tmp/photos-europe.tar' // Make a bucket called europetrip. minioClient.makeBucket('europetrip', 'us-east-1', function(err) { if (err) return console.log(err) console.log('Bucket created successfully in "us-east-1".') var metaData = { 'Content-Type': 'application/octet-stream', 'X-Amz-Meta-Testing': 1234, 'example': 5678 } // Using fPutObject API upload your file to the bucket europetrip. minioClient.fPutObject('europetrip', 'photos-europe.tar', file, metaData, function(err, etag) { if (err) return console.log(err) console.log('File uploaded successfully.') }); });
Run file-uploader
node file-uploader.js Bucket created successfully in "us-east-1". mc ls play/europetrip/ [2016-05-25 23:49:50 PDT] 17MiB photos-europe.tar
ارجاعات کامل در اینجا در دسترس است:
مستندات کامل در این ادرس در دسترس است:
https://docs.min.io/docs/javascript-client-quickstart-guide.html
استفاده از MinIO Client SDK برای NET. در پارتیشن S3 پشتیبان
MinIO Client SDK برای .NET یک API عالی برای تعامل با پارتیشن S3 Compatible پشتیبان در اختیار شما میگذارد. برای دسترسی به لیست کامل مثال ها و مستندات API به اینجا مراجعه کنید.
نسخههای معتبر .NET 4.5.2, .NetStandard 2.0 و بالاتر و Visual Studio 2017 است.
برای نصب کامل پکیج MinIO در ناگت دستور زیر را در کنسول پکیج ناگت اجرا کنید:
PM> Install-Package Minio
این مثال بر روی سرور عمومی MinIO به ادرس ‘play.min.io’ میزبانی شده است. همچنین میتوانید به جای پارامترهای امده در مثال از کلید دسترسی و کلید خصوصی و اندپوینت پارتیشن S3 تان در پشتیبان استفاده کنید.
using Minio; // Initialize the client with access credentials. private static MinioClient minio = new MinioClient("play.min.io", "Q3AM3UQ867SPQQA43P2F", "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG" ).WithSSL(); // Create an async task for listing buckets. var getListBucketsTask = minio.ListBucketsAsync(); // Iterate over the list of buckets. foreach (Bucket bucket in getListBucketsTask.Result.Buckets) { Console.WriteLine(bucket.Name + " " + bucket.CreationDateDateTime); }
مثال یک فایل آپلودر کامل با دات نت و ذخیره فایل در Objrect Storage
در این مثال به آبجکت استوریج متصل شده و یک باکت میسازید و یک فایل در باکت آپلود میکنید. برای اجرای ای مثال باید روی [link] کلیک کنید و پروژه را استارت کنید.
using System; using Minio; using Minio.Exceptions; using Minio.DataModel; using System.Threading.Tasks; namespace FileUploader { class FileUpload { static void Main(string[] args) { var endpoint = "play.min.io"; var accessKey = "Q3AM3UQ867SPQQA43P2F"; var secretKey = "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG"; try { var minio = new MinioClient(endpoint, accessKey, secretKey).WithSSL(); 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 = "mymusic"; var location = "us-east-1"; var objectName = "golden-oldies.zip"; var filePath = "C:\\Users\\username\\Downloads\\golden_oldies.mp3"; var contentType = "application/zip"; try { // Make a bucket on the server, if not already present. bool found = await minio.BucketExistsAsync(bucketName); if (!found) { await minio.MakeBucketAsync(bucketName, location); } // Upload a file to bucket. await minio.PutObjectAsync(bucketName, objectName, filePath, contentType); Console.WriteLine("Successfully uploaded " + objectName ); } catch (MinioException e) { Console.WriteLine("File Upload Error: {0}", e.Message); } } } }
اجرا کردن مثالهای کلاینت MinIO در ویندوز
این ریپوزیتوری را کلون کنید و Minio.Sln در Visual Studio 2017 اجرا کنید. سپس اطلاعات دسترسی و نام باکت و بقیه موارد را وارد کنید. در Minio.Examples/Program.cs دستوری مثل زیر را از حالت کامت در Program.cs خارج کنید تا مثال اجرا شود :
//Cases.MakeBucket.Run(minioClient, bucketName).Wait();
مستندات کامل و مثال های بیشتر در این آدرس در دسترس است.