AWS SDK
Python
Boto
boto3 — это комплекты средств разработки (SDK) для языков программирования Python 3.x. SDK предназначены для работы с сервисами AWS.
Для установки boto воспользуйтесь инструкциями в соответствующих репозиториях boto3.
Для настройки создайте в домашнем каталоге конфигурационные файлы и задайте параметры:
- статический ключ в файле ~/.aws/credentials:
[default]
aws_access_key_id = НомерАккаунта_ИмяПользователя
aws_secret_access_key = Пароль
- пул по умолчанию в файле ~/.aws/config:
[default]
region=ru-1
Примеры операций
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import boto3
# Авторизация
s3 = boto3.client(
service_name='s3',
endpoint_url='https://s3.storage.selcloud.ru'
)
# Загрузка объекта из строки
s3.put_object(Bucket='BucketName', Key='ObjectName1', Body='Test')
# Загрузка объекта из файла
s3.upload_file('data.docx', 'BucketName', 'ObjectName2')
# Получение списка объектов в бакете
for key in s3.list_objects(Bucket='BucketName')['Contents']:
print(key['Key'])
# Скачивание объекта
get_object_response = s3.get_object(Bucket='BucketName', Key='ObjectName2')
print(get_object_response['Body'].read())
# Удаление нескольких объектов
objects_to_delete = [{'Key': 'ObjectName1'}, {'Key': 'ObjectName2'}]
s3.delete_objects(Bucket='BucketName', Delete={'Objects': objects_to_delete})
Пример для boto3
Создайте s3-клиент, предоставив endpoint_url, пул и данные пользователя, от имени которого будет производиться загрузка объектов:
s3 = boto3.client('s3', endpoint_url='https://s3.storage.selcloud.ru', region_name='ru-1', aws_access_key_id='user', aws_secret_access_key='user_pass')
Вызовите метод generate_presigned_post(), передав имя бакета, в который будет производиться загрузка, и имя ключа, которое может содержать шаблон ${filename} для имени файла, предоставленного пользователем в момент загрузки. Данный вызов вернёт словарь с url, на которую должна отправляться форма, и словарём fields со всеми необходимыми заполненными полями для этой формы (X-Amz-Algorithm, X-Amz-Credential, X-Amz-Date, X-Amz-Signature, Policy).
post = s3.generate_presigned_post(bucket, key)
Если к объекту (и форме) необходимо добавить дополнительные поля, например, заголовок Content-Type, то передайте словарь с этими полями аргументом Fields. Также, согласно спецификации Policy, нужно описать каждое дополнительное поле в массиве conditions (аргумент Conditions в boto).
post = s3.generate_presigned_post(bucket, key,
Fields={"Content-Type": "image/webp"},
Conditions=[["eq", "$content-type", "image/webp"]])
Из полученных данных можно составить HTML-форму или воспроизвести запрос через requests:
requests.post(post['url'], data=post['fields'], files=[("file", ('filename', b'body_data'))])
При генерации HTML-формы стоит учитывать, что поле file с данными загружаемого файла должно находиться в конце формы.
PHP
AWS SDK для PHP — это комплект средств разработки для работы с сервисами AWS.
SDK представляет собой современную библиотеку PHP с открытым исходным кодом, которая упрощает интеграцию приложения на PHP с объектным хранилищем S3.
Для подключения библиотеки с помощью инструмента управления зависимостями Composer выполните следующие шаги:
- Установите Composer:
curl -sS https://getcomposer.org/installer | php
- Запустите команду Composer для установки последней стабильной версии SDK:
php composer.phar require aws/aws-sdk-php
- Включите aws-sdk-php в свой скрипт.
Для авторизации необходимы ключи доступа Access key ID (НомерАккаунта_ИмяПользователя) и Secret access key (Пароль).
Примеры операций
<?php
require 'vendor/autoload.php';
use Aws\S3\S3Client;
// Создание клиента
$s3Client = new S3Client([
'version' => 'latest',
'region' => 'ru-1',
'use_path_style_endpoint' => true,
'credentials' => [
'key' => 'НомерАккаунта_ИмяПользователя',
'secret' => 'Пароль',
],
'endpoint' => 'https://s3.storage.selcloud.ru'
]);
// Загрузка объекта из строки
$s3Client->putObject([
'Bucket' => 'BucketName',
'Key' => 'ObjectName',
'Body' => 'Test'
]);
// Скачивание объекта
$result = $s3Client->getObject([
'Bucket' => 'BucketName',
'Key' => 'ObjectName'
]);
echo $result['Body'];
JavaScript
AWS SDK для Node.js — это комплект средств разработки для работы JavaScript с сервисами AWS в среде Node.js.
Пример работы для Node.js
var S3 = require('aws-sdk/clients/s3');
var s3 = new S3({
credentials: {
accessKeyId: 'НомерАккаунта_ИмяПользователя',
secretAccessKey: 'Пароль'
},
endpoint: 'https://s3.storage.selcloud.ru',
s3ForcePathStyle: true,
region: 'ru-1',
apiVersion: 'latest'
});
// Загрузка объекта
var params = {
Bucket: 'BucketName',
Key: 'ObjectName',
Body: 'Test'
};
s3.upload(params, (err, data) => {
if (err) {
console.log(err, err.stack);
} else {
console.log(data);
}
/*
data = {
ETag: '0cbc6611f5540bd0809a388dc95a615b',
Location: 'https://s3.storage.selcloud.ru/BucketName/ObjectName',
key: 'ObjectName',
Key: 'ObjectName',
Bucket: 'BucketName'
}
*/
});
// Получение метаданных объекта
var params = {
Bucket: 'BucketName',
Key: 'ObjectName'
};
s3.headObject(params, (err, data) => {
if (err) {
console.log(err, err.stack);
} else {
console.log(data);
}
/*
data = {
AcceptRanges: 'bytes',
LastModified: 2019-12-03T17:29:15.000Z,
ContentLength: 4,
ETag: '0cbc6611f5540bd0809a388dc95a615b',
ContentType: 'application/octet-stream',
Metadata: {}
}
*/
});
// Получение объекта
var params = {
Bucket: 'BucketName',
Key: 'ObjectName'
};
s3.getObject(params, (err, data) => {
if (err) {
console.log(err, err.stack);
} else {
console.log(data);
}
/*
data = {
AcceptRanges: 'bytes',
LastModified: 2019-12-03T17:29:15.000Z,
ContentLength: 4,
ETag: '0cbc6611f5540bd0809a388dc95a615b',
ContentType: 'application/octet-stream',
Metadata: {},
Body: <Buffer 54 65 73 74>
}
*/
});
// Удаление объекта
var params = {
Bucket: 'BucketName',
Key: 'ObjectName'
};
s3.deleteObject(params, (err, data) => {
if (err) {
console.log(err, err.stack);
} else {
console.log(data);
}
/*
data = {
}
*/
});
Java
// Configure S3 client connection
AWSCredentials credentials = new BasicAWSCredentials(
"<access_key>",
"<secret_key>"
);
EndpointConfiguration endpoint =
new EndpointConfiguration("https://s3.storage.selcloud.ru", "ru-1");
AmazonS3 s3client = AmazonS3ClientBuilder
.standard()
.withCredentials(new AWSStaticCredentialsProvider(credentials))
.withPathStyleAccessEnabled(true)
.withEndpointConfiguration(endpoint)
.build();
// Create bucket
String bucketName = "s3bucket";
String objectName = "s3object";
if(!s3client.doesBucketExistV2(bucketName)) {
s3client.createBucket(bucketName);
}
// Upload object
s3client.putObject(
bucketName,
objectName,
"sample-data"
);
// Download object
S3Object s3object = s3client.getObject(bucketName, objectName);
S3ObjectInputStream inputStream = s3object.getObjectContent();
inputStream.transferTo(new FileOutputStream("downloaded-object"));
// Delete object
s3client.deleteObject(bucketName, objectName);
// Delete bucket
s3client.deleteBucket(bucketName);