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.cloud4u.com: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.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 успешно создан

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-ти дневный бесплатный доступ.

  • 28 Users Found This Useful
Was this answer helpful?

Related Articles

How to start working with the object storage

CLOUD4Y OBJECTIVE STORAGE Our object storage is built on Cloudian platform and supports Amazon...

How to get started with S3 Cloud4y using AWS Command Line Interface (CLI)

1) Install AWS CLI - On Windows, load AWSCLI-64 or AWSCLI-32 bit installer for Windows and set...

7. Billing in S3 Object Storage

  Billing in S3 includes the following parameters The amount of space used Number of...

3.Storage and data access management in S3 Object Storage

1.Organization of data storage in S3 object storageS3 is not a hierarchical file system, but...

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

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