اتصال به فضای ذخیره‌سازی ابری در برنامه‌های Golang


برای استفاده از Object Storage در برنامه‌های 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

پس از آن، کافیست تا طبق مستندات ایجاد کلید، یک کلید جدید برای باکت خود بسازید. اطلاعات مربوط به ENDPOINT و نام باکت نیز در صفحه تنظیمات، در بخش دسترسی با SDK، برای شما قرار گرفته است. در نهایت نیز، بایستی اطلاعات مربوط به Object Storage خود را به متغیرهای محیطی برنامه خود، اضافه کنید؛ به عنوان مثال:

کپی
LIARA_ENDPOINT=https://<Liara Bucket Endpoint>
LIARA_BUCKET_NAME=<Bucket Name>
LIARA_ACCESS_KEY=<Access Key>
LIARA_SECRET_KEY=<Secret Key>

تمامی کارها انجام شده است و می‌توانید از Object Storage در برنامه خود، استفاده کنید؛ در ادامه، یک قطعه کد تابع نمونه برای‌تان قرار گرفته است که طریقه اتصال و آپلود فایل به باکت در برنامه 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")}