0. Устанавливаем php
Инструкция здесь
1. Установим composer
Переходим в директорию из которой будем работать с php.
Загрузим в неё composer.phar
2. Установим пакет aws/aws-sdk-php
php composer.phar require aws/aws-sdk-php
3. Полученим данные профайла
Заходим в панель администрирования услугой по адресу: https://cmc.objstor.cloud4u.com:8443/, используя свои учетный данные, полученные от технической поддержки Cloud4Y после приобретения услуги или от вашего администратора S3
В панели администрирования, в свойствах профиля узнаем и запоминаем (записываем) ACCESS KEY ID, SECRET KEY
4. Создаем php файл, прописываем key и secret, инициируем объект s3Client
require 'vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\S3\ObjectUploader;
use Aws\S3\MultipartUploader;
use Aws\Exception\MultipartUploadException;
#Создадим экземпляр s3
$s3 = new S3Client([
'version' => 'latest',
'region' => 'msk',
'use_path_style_endpoint' => true,
'credentials' => [
'key' => 'KEY',
'secret' => 'SECRET',
],
'endpoint' => 'https://s3.objstor.cloud4u.com'
]);
5. Создаем bucket
#Создим bucket через api
$s3->createBucket(['Bucket' => 'my-new-bucket']);
#Проверим появился ли новый бакет в общем списке
$listBuckets = $s3->listBuckets();
echo ''
;
var_export($listBuckets->toArray()['Buckets']);
echo '
';
Как видим, bucket успешно создан
Все указанные действия, мы можем также проверить в панели управления
6) Добавим объект в bucket
#Загрузим объект из строки
$s3->putObject([
'Bucket' => 'my-new-bucket',
'Key' => 'MyNewObjectForDelete',
'Body' => 'MyObjectBody1',
]);
#Получим объект
$result = $s3->getObject([
'Bucket' => 'my-new-bucket',
'Key' => 'MyNewObjectForDelete'
]);
echo ''
;
var_export($result->toArray());
echo '
';
Запустив php скрипт видим, объект создан
7) Удалим объект
echo 'До
';
#Получим список объектов
$result = $s3->listObjects([
'Bucket' => 'my-new-bucket'
]);
echo ''
;
var_export($result->toArray()['Contents']);
echo '
';
#Удалим объект
$s3->deleteObject([
'Bucket' => 'my-new-bucket',
'Key' => 'MyNewObjectForDelete'
]);
echo 'После
'; #Получим список объектов $result = $s3->listObjects([ 'Bucket' => 'my-new-bucket' ]); echo ''; var_export($result->toArray()['Contents']); echo '';
Видим, что из двух объектов, стался один
8) Загрузка объекта с помощью MultipartUploader, подходит для файлов от 5MB до 5TB
#Using stream instead of file path
$source = './bff-107mb.zip';
$uploader = new MultipartUploader($s3, $source, [
'bucket' => $bucketName,
'key' => 'my-file.zip',
]);
#Восстановление после ошибок
do {
try {
$result = $uploader->upload();
} catch (MultipartUploadException $e) {
$uploader = new MultipartUploader($s3, $source, [
'state' => $e->getState(),
]);
}
} while (!isset($result));
# Прервать загрузку, если она не удалась
try {
$result = $uploader->upload();
} catch (MultipartUploadException $e) {
#State содержит "Bucket", "Key", и "UploadId"
$params = $e->getState()->getId();
$result = $s3->abortMultipartUpload($params);
}
echo ''
;
var_export($result->toArray());
echo '
';
}
9) Если вы не уверены, выбрать PutObject или MultipartUploader для загрузки объекта, используйте ObjectUploader. ObjectUploader загрузит большой файл в S3 используя PutObject или MultipartUploader под капотом, сделав самостоятельно выбор, основываясь на размере объекта.
$source = fopen('./bff-107mb.zip', 'rb');
$uploader = new ObjectUploader(
$s3,
'my-new-bucket',
'file.zip',
$source
);
do {
try {
$result = $uploader->upload();
if ($result["@metadata"]["statusCode"] == '200') {
print('File successfully uploaded to '
. $result["ObjectURL"] . '.');
}
print($result);
} catch (MultipartUploadException $e) {
rewind($source);
$uploader = new MultipartUploader($s3, $source, [
'state' => $e->getState(),
]);
}
} while (!isset($result));
fclose($source);
10) Успешно, File successfully uploaded.
Больше информации про aws-sdk-php на github