Операции с объектами
Проведя предварительные настройки сессии, можно приступить к работе с объектами S3.
Загрузка объектов в бакет инициализируется данной командой:
1package main 2 3import ( 4 "github.com/aws/aws-sdk-go/aws" 5 "github.com/aws/aws-sdk-go/aws/session" 6 "github.com/aws/aws-sdk-go/service/s3" 7 "log" 8 "os" 9 "strings" 10) 11 12const ( 13 vkCloudHotboxEndpoint = "https://hb.vkcs.cloud" 14 defaultRegion = "us-east-1" 15) 16 17func main() { 18 // Создание сессии 19 sess, _ := session.NewSession() 20 21 // Подключение к сервису S3 22 svc := s3.New(sess, aws.NewConfig().WithEndpoint(vkCloudHotboxEndpoint).WithRegion(defaultRegion)) 23 24 bucket := "gobucket" 25 26 // Загрузка объекта из строки в бакет 27 key := "test_string.txt" 28 body := "Hello World!" 29 30 if _, err := svc.PutObject(&s3.PutObjectInput{ 31 Bucket: aws.String(bucket), 32 Key: aws.String(key), 33 Body: strings.NewReader(body), 34 }); err != nil { 35 log.Fatalf("Unable to upload %q to %q, %v\n", body, bucket, err) 36 } else { 37 log.Printf("File %q uploaded to bucket %q\n", body, bucket) 38 } 39 40 // Загрузка объекта из файла в бакет 41 fileName := "test.txt" 42 file, err := os.Open(fileName) 43 if err != nil { 44 log.Fatalf("Unable to open file %q, %v\n", fileName, err) 45 } 46 47 defer file.Close() 48 49 if _, err := svc.PutObject(&s3.PutObjectInput{ 50 Bucket: aws.String(bucket), 51 Key: aws.String(key), 52 Body: file, 53 }); err != nil { 54 log.Fatalf("Unable to upload %q to %q, %v\n", fileName, bucket, err) 55 } else { 56 log.Printf("File %q uploaded to bucket %q\n", fileName, bucket) 57 } 58}
Подробное описание PutObject дано в официальной документации библиотеки aws-sdk-go.
Копирование объектов между бакетами можно выполнить следующим образом:
1package main 2 3import ( 4 "fmt" 5 "github.com/aws/aws-sdk-go/aws" 6 "github.com/aws/aws-sdk-go/aws/session" 7 "github.com/aws/aws-sdk-go/service/s3" 8 "log" 9 "strings" 10) 11 12const ( 13 vkCloudHotboxEndpoint = "https://hb.vkcs.cloud" 14 defaultRegion = "us-east-1" 15) 16 17func main() { 18 // Создание сессии 19 sess, _ := session.NewSession() 20 21 // Подключение к сервису S3 22 svc := s3.New(sess, aws.NewConfig().WithEndpoint(vkCloudHotboxEndpoint).WithRegion(defaultRegion)) 23 24 // Копирование объекта из одного бакета в другой 25 26 sourceBucket := "gobucket" 27 sourceKey := "test_string.txt" 28 destBucket := "gobucket2" 29 destKey := "test_string.txt" 30 31 if _, err := svc.CopyObject(&s3.CopyObjectInput{ 32 Bucket: aws.String(destBucket), 33 Key: aws.String(destKey), 34 CopySource: aws.String(fmt.Sprintf("%s/%s", sourceBucket, sourceKey)), 35 }); err != nil { 36 log.Fatalf("Unable to copy object from %q to %q, %v\n", sourceBucket, destBucket, err) 37 } else { 38 fmt.Printf("Object copied from %q to %q\n", sourceBucket, destBucket) 39 } 40}
Подробное описание команды CopyObject дано в официальной документации библиотеки aws-sdk-go
Для получения объекта из бакета следует воспользоваться следующим способом:
1package main 2 3import ( 4 "github.com/aws/aws-sdk-go/aws" 5 "github.com/aws/aws-sdk-go/aws/session" 6 "github.com/aws/aws-sdk-go/service/s3" 7 "log" 8 "strings" 9) 10 11const ( 12 vkCloudHotboxEndpoint = "https://hb.vkcs.cloud" 13 defaultRegion = "us-east-1" 14) 15 16func main() { 17 // Создание сессии 18 sess, _ := session.NewSession() 19 20 // Подключение к сервису S3 21 svc := s3.New(sess, aws.NewConfig().WithEndpoint(vkCloudHotboxEndpoint).WithRegion(defaultRegion)) 22 23 bucket := "gobucket" 24 key := "test_string.txt" 25 26 // извлечение объекта из бакета 27 if result, err := svc.GetObject(&s3.GetObjectInput{ 28 Bucket: aws.String(bucket), 29 Key: aws.String(key), 30 }); err != nil { 31 log.Fatalf("Unable to get object %q from bucket %q, %v\n", key, bucket, err) 32 } else { 33 data := make([]byte, *result.ContentLength) 34 result.Body.Read(data) 35 log.Printf("File with data %q downloaded from bucket %q", data, bucket) 36 } 37}
Подробное описание команды GetObject дано в официальной документации библиотеки aws-sdk-go.
Для получения списка объектов в бакете выполнить код:
1package main 2 3import ( 4 "github.com/aws/aws-sdk-go/aws" 5 "github.com/aws/aws-sdk-go/aws/session" 6 "github.com/aws/aws-sdk-go/service/s3" 7 "log" 8) 9 10const vkCloudHotboxEndpoint = "https://hb.vkcs.cloud" 11 12const defaultRegion = "us-east-1" 13 14func main() { 15 // Создание сессии 16 sess, _ := session.NewSession() 17 18 // Подключение к сервису S3 19 svc := s3.New(sess, aws.NewConfig().WithEndpoint(vkCloudHotboxEndpoint).WithRegion(defaultRegion)) 20 21 bucket := "gobucket" 22 // получение списка объектов в бакете 23 result, err := svc.ListObjectsV2(&s3.ListObjectsV2Input{ 24 Bucket: aws.String(bucket), 25 }) 26 if err != nil { 27 log.Fatalf("Unable to list items in bucket %q, %v", bucket, err) 28 } else { 29 // итерирование по объектам 30 for _, item := range result.Contents { 31 log.Printf("Object: %s, size: %d\n", aws.StringValue(item.Key), aws.Int64Value(item.Size)) 32 } 33 } 34}
В официальной документации к библиотеке aws-sdk-go дано подробное описание команды ListObjectsV2.
Чтобы удалить объекты в бакете:
1package main 2 3import ( 4 "github.com/aws/aws-sdk-go/aws" 5 "github.com/aws/aws-sdk-go/aws/session" 6 "github.com/aws/aws-sdk-go/service/s3" 7 "log" 8 "strings" 9) 10 11const ( 12 vkCloudHotboxEndpoint = "https://hb.vkcs.cloud" 13 defaultRegion = "us-east-1" 14) 15 16func main() { 17 // Создание сессии 18 sess, err := session.NewSession() 19 if err != nil { 20 log.Fatalf("Unable to create session, %v", err) 21 } 22 // Подключение к сервису S3 23 svc := s3.New(sess, aws.NewConfig().WithEndpoint(vkCloudHotboxEndpoint).WithRegion(defaultRegion)) 24 25 // Удаление объекта из бакета 26 bucket := "gobucket" 27 key := "test_string.txt" 28 29 if _, err := svc.DeleteObject(&s3.DeleteObjectInput{ 30 Bucket: aws.String(bucket), 31 Key: aws.String(key), 32 }); err != nil { 33 log.Fatalf("Unable to delete object %q from bucket %q, %v\n", key, bucket, err) 34 } else { 35 log.Printf("Object %q deleted from bucket %q\n", key, bucket) 36 } 37 38 // Удаление множества объектов 39 if _, err := svc.DeleteObjects(&s3.DeleteObjectsInput{ 40 Bucket: aws.String(bucket), 41 Delete: &s3.Delete{ 42 Objects: []*s3.ObjectIdentifier{ 43 { 44 Key: aws.String("test_string1.txt"), 45 }, 46 { 47 Key: aws.String("test_string2.txt"), 48 }, 49 }, 50 }, 51 }); err != nil { 52 log.Fatalf("Unable to delete objects from bucket %q, %v\n", bucket, err) 53 } else { 54 log.Printf("Objects deleted from bucket %q\n", bucket) 55 } 56}
Подробное описание команд дано в официальной документации библиотеки aws-sdk-go по методам DeleteObject и DeleteObjects.