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
<?php 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
<?php #Создим bucket через api $s3->createBucket(['Bucket' => 'my-new-bucket']); #Проверим появился ли новый бакет в общем списке $listBuckets = $s3->listBuckets(); echo '<pre>'; var_export($listBuckets->toArray()['Buckets']); echo '</pre>';
Как видим, bucket успешно создан
Все указанные действия, мы можем также проверить в панели управления
6) Добавим объект в bucket
<?php #Загрузим объект из строки $s3->putObject([ 'Bucket' => 'my-new-bucket', 'Key' => 'MyNewObjectForDelete', 'Body' => 'MyObjectBody1', ]); #Получим объект $result = $s3->getObject([ 'Bucket' => 'my-new-bucket', 'Key' => 'MyNewObjectForDelete' ]); echo '<pre>'; var_export($result->toArray()); echo '</pre>';
Запустив php скрипт видим, объект создан
7) Удалим объект
<?php echo '<h2>До</h2>'; #Получим список объектов $result = $s3->listObjects([ 'Bucket' => 'my-new-bucket' ]); echo '<pre>'; var_export($result->toArray()['Contents']); echo '</pre>'; #Удалим объект $s3->deleteObject([ 'Bucket' => 'my-new-bucket', 'Key' => 'MyNewObjectForDelete' ]); echo '<h2>После</h2>'; #Получим список объектов $result = $s3->listObjects([ 'Bucket' => 'my-new-bucket' ]); echo '<pre>'; var_export($result->toArray()['Contents']); echo '</pre>';
Видим, что из двух объектов, стался один
8) Загрузка объекта с помощью MultipartUploader, подходит для файлов от 5MB до 5TB
<?php #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 '<pre>'; var_export($result->toArray()); echo '</pre>'; }
9) Если вы не уверены, выбрать PutObject или MultipartUploader для загрузки объекта, используйте ObjectUploader. ObjectUploader загрузит большой файл в S3 используя PutObject или MultipartUploader под капотом, сделав самостоятельно выбор, основываясь на размере объекта.
<?php $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('<p>File successfully uploaded to ' . $result["ObjectURL"] . '.</p>'); } 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