پلتفرم Golang
(Golang Platform)اتصال به ذخیرهسازی ابری
بدون شک اتصال برنامه به یک ذخیرهسازی ابری مطمئن برای نگهداری و ارائه فایلهای استاتیک وبسایت یا دادههای آپلود شده توسط کاربران، باعث اطمینان خاطر صاحبان کسب و کار و بهبود عملکرد برنامه میشود.
فهرست عناوین:
نصب AWS SDK
از آنجا که ذخیرهسازی ابری لیارا یک سرویس Object storage سازگار با پروتکل S3 است، شما میتوانید با استفاده از AWS SDK، در زبانها و فریمورکهای مختلفی این فضای ذخیرهسازی را مدیریت کنید. حال برای اتصال به ذخیرهسازی ابری در Golang باید با اجرای دستورهای زیر، پکیجهای مورد نیاز را نصب کنید:
$ go get github.com/aws/aws-sdk-go-v2/aws
$ go get github.com/aws/aws-sdk-go-v2/config
$ go get github.com/aws/aws-sdk-go-v2/service/s3
دریافت کلیدها
اگر باکت شما خصوصی باشد، برای دسترسی به باکت، نیاز به کلید دارید. برای ساخت کلید، به صفحه ذخیرهسازی ابری رفته و طبق عکسها کلیدخود را بسازید.
به قسمت کلیدها رفته:
یک کلید جدید بسازید.
کلیدهای ساختهشده را ذخیره کنید. توجه داشتهباشید که SECRET_KEY تنها یک بار نمایش داده میشود و پس از آن باید کلید را درجایی مطمئن ذخیره کنید.
تنظیم متغیرهای محیطی
در این مرحله باید کلیدها، نام باکت و endpoint لیارا را در فایل .env ذخیره کنید:
LIARA_ENDPOINT=https://<Liara Bucket Endpoint>
LIARA_BUCKET_NAME=<Bucket Name>
LIARA_ACCESS_KEY=<Access Key>
LIARA_SECRET_KEY=<Secret Key>
لطفا توجه داشتهباشید که باید هریک از مقادیر بالا را با متغیر های باکتخودتان جایگزین کنید. به عنوان مثال، یک فایل .env میتواند به شکل زیر باشد:
LIARA_ENDPOINT=https://storage.iran.liara.space
LIARA_BUCKET_NAME=my-personal-files
LIARA_ACCESS_KEY=nad4u71et9dgc3go
LIARA_SECRET_KEY=82c963df-1122-4c31-868b-0124a28ad57d
نحوهی استفاده
قطعه کد زیر، یک تابع نمونه است که طریقه اتصال و آپلود فایل به باکت در برنامه golang را نشان میدهد:
func upload_using_s3(fileContent *bytes.Reader, fileName string) error {
err := godotenv.Load()
if err != nil {
log.Fatal("Error loading .env file")}
cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion("us-west-2"))
if err != nil {
return err
}
// Define AWS credentials and bucket information
awsAccessKeyID := os.Getenv("LIARA_ACCESS_KEY")
awsSecretAccessKey := os.Getenv("LIARA_SECRET_KEY")
endpoint := os.Getenv("LIARA_ENDPOINT")
bucketName := os.Getenv("LIARA_BUCKET_NAME")
// Initialize S3 client with custom configuration
cfg.Credentials = aws.CredentialsProviderFunc(func(ctx context.Context) (aws.Credentials, error) {
return aws.Credentials{
AccessKeyID: awsAccessKeyID,
SecretAccessKey: awsSecretAccessKey,
}, nil
})
cfg.BaseEndpoint = aws.String(endpoint)
client := s3.NewFromConfig(cfg)
// Specify the destination key in the bucket
destinationKey := "uploads/" + fileName
// Use the S3 client to upload the file
_, err = client.PutObject(context.TODO(), &s3.PutObjectInput{
Bucket: aws.String(bucketName),
Key: aws.String(destinationKey),
Body: fileContent,
})
return err
}
از تابع فوق میتوان در بدنه اصلی برنامه (تابع main)، به شکل زیر استفاده کرد:
func main() {
// Example: Upload a file to S3
fileName := "example.txt"
fileContent := []byte("Hello, S3!")
err := upload_using_s3(bytes.NewReader(fileContent), fileName)
if err != nil {
log.Fatalf("failed to upload file, %v", err)
}
fmt.Printf("File uploaded successfully!\n")}
کد کامل برنامه:
package main
import (
"bytes"
"context"
"fmt"
"log"
"os"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/service/s3"
"github.com/joho/godotenv"
)
func upload_using_s3(fileContent *bytes.Reader, fileName string) error {
err := godotenv.Load()
if err != nil {log.Fatal("Error loading .env file")}
cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion("us-west-2"))
if err != nil {
return err
}
// Define AWS credentials and bucket information
awsAccessKeyID := os.Getenv("LIARA_ACCESS_KEY")
awsSecretAccessKey := os.Getenv("LIARA_SECRET_KEY")
endpoint := os.Getenv("LIARA_ENDPOINT")
bucketName := os.Getenv("LIARA_ENDPOINT")
// Initialize S3 client with custom configuration
cfg.Credentials = aws.CredentialsProviderFunc(func(ctx context.Context) (aws.Credentials, error) {
return aws.Credentials{
AccessKeyID: awsAccessKeyID,
SecretAccessKey: awsSecretAccessKey,
}, nil
})
cfg.BaseEndpoint = aws.String(endpoint)
client := s3.NewFromConfig(cfg)
// Specify the destination key in the bucket
destinationKey := "uploads/" + fileName
// Use the S3 client to upload the file
_, err = client.PutObject(context.TODO(), &s3.PutObjectInput{
Bucket: aws.String(bucketName),
Key: aws.String(destinationKey),
Body: fileContent,
})
return err
}
func main() {
// Example: Upload a file to S3
fileName := "example.txt"
fileContent := []byte("Hello, S3!")
err := upload_using_s3(bytes.NewReader(fileContent), fileName)
if err != nil {
log.Fatalf("failed to upload file, %v", err)
}
fmt.Printf("File uploaded successfully!
")
}
برای اطلاعات بیشتر میتوانید به مستندات golang s3 مراجعه کنید.
متوجه شدم، برو گام بعدی!