استفاده از SDK برای تعامل با فضای ابری S3-Compatible پشتیبان

استفاده از SDK برای تعامل با فضای ابری S3 پشتیبان

برای ذخیره سازی فایل‌های وب سایت یا اپلیکیشن‌تان در فضای ابری پشتیبان با استفاده از SDK (Software Developers Kit) هایی که برای  زبان‌های مختلف برنامه نویسی و فریم‌وورک های مختلف برنامه نویسی وجود دارد، سریع‌تر، سامانه ذخیره سازی و گردش داده‌ی اختصاصی خودتان را پیاده سازی خواهید کرد.

با مقبولیتی که سرویس ذخیره سازی آبجکتی آمازون با ساختار Simple Storage Service یا به اختصار S3 در بین توسعه دهندگان پیدا کرد SKD های زبان های مختلف برنامه نویسی هم برای تعامل ساده‌تر و توسعه پرسرعت در دسترس برنامه نویسان وب و موبایل قرارگرفت. همین مقبولیت باعث شد که دیگر سرویس‌های ذخیره سازی ابری هم همین ساختار آمازون را در Cloud Storage  خود پیاده سازی کنند و سرویس S3-compatible مشابه آمازون را به کاربران ارائه دهند.

در ذخیره ساز ابری پشتیبان هم با ایجاد پارتیشن S3-compatible پشتیبان می‌توانید مجموعه‌ی کاملی از ابزارهای آماده برای اتصال وب سایت، برنامه کاربردی، Game و سامانه آنلاین‌تان به فضای ابری پشتیبان استفاده کنید.  همچنین، اگر در حال حاضر از سرویس‌های S3-compatible دیگری مثل آمازون S3، دیجیتال اوشن، گوگل کلود و علی‌بابا کلود و غیره استفاده می‌کنید به سادگی می‌توانید به ذخیره ساز ابری پشتیبان مهاجرت کرده و از مزایای پلتفرم ابری پر سرعت پشتیبان و هزینه ارزان تر آن بهره‌مند شوید.

 در این نوشتار، به صورت لیست وار برخی از این ابزارها را با مثال آپلود فایل در فضای ابری، برای زبان های برنامه نویسی و فریم وورک های مختلف برنامه نویسی معرفی خواهیم کرد. اما پیش از آن خیلی کوتاه برای شما توضیح می‌دهیم که مزیای فضای ابری 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

Complete API Reference

مستندات کامل:

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 در اینجا در دسترس شماست:

Complete API Reference

مستندات کامل 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

ارجاعات کامل در اینجا در دسترس است:

Complete API Reference

مستندات کامل در این ادرس در دسترس است:

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();

مستندات کامل و مثال های بیشتر در این آدرس در دسترس است.