5.Работа с S3 средствами AWS SDK Client на php

0. Устанавливаем php

Инструкция здесь

1. Установим composer

Переходим в директорию из которой будем работать с php.
Загрузим в неё composer.phar

2. Установим пакет aws/aws-sdk-php

php composer.phar require aws/aws-sdk-php


3. Полученим данные профайла

Заходим в панель администрирования услугой по адресу: https://cmc.objstor.cloud4y.ru:8443, используя свои учетный данные, полученные от технической поддержки Cloud4Y  после приобретения услуги или от вашего администратора S3


S3 AWS

 

В панели администрирования, в свойствах профиля узнаем и запоминаем (записываем) ACCESS KEY ID, SECRET KEY

S3 AWS


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.flexcloud.ru'
]);


5. Создаем bucket

<?php

#Создим bucket через api
$s3->createBucket(['Bucket' => 'my-new-bucket']);


#Проверим появился ли новый бакет в общем списке
$listBuckets = $s3->listBuckets();
echo '<pre>';
var_export($listBuckets->toArray()['Buckets']);
echo '</pre>';


Как видим, bucket успешно создан

S3 AWS


Все указанные действия, мы можем также проверить в панели управления

S3 AWS


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 скрипт видим, объект создан

S3 AWS


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>';

Видим, что из двух объектов, стался один

S3 AWS

S3 AWS


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

 

Ещё не пробовали услугу "Облачный хостинг" от Cloud4Y?

Отправьте заявку сейчас и получите 14-ти дневный бесплатный доступ.

  • 1 Пользователи нашли это полезным
Помог ли вам данный ответ?

Связанные статьи

1.Как начать работу с объектным хранилищем

ОБЪЕКТНОЕ ХРАНИЛИЩЕ ОТ CLOUD4Y Наше объектное хранилище построено на платформе компании Cloudian...

2.Как начать работу с S3 Cloud4y используя AWS Command Line Interface (CLI)

1) Устанавливем AWS CLI - На Windows, загружаем  AWSCLI-64  или  AWSCLI-32 разрядный установщик...

4.Способы работы с объектным хранилищем через различное программное обеспечение

Подготовка идентификационных данных 1. Авторизуйтесь в объектном хранилище Cloud4Y:...

3.Хранение и управление доступом на данные в объектном хранилище S3

1.Организация хранения данных в объектном хранилище S3S3 — это не иерархическая файловая система,...

6.Доступ в S3 из панели управления облаком VCD

Благодаря наличию плагина VMware vCloud Director® Object Storage Extension™ пользователям Cloud4y...