Amazon S3 / MinIO: Dateiupload und Download

Mal ein kleines Cloud- und Cluster-Thema.

Amazon S3 ist ein einfacher Key-Value Store, wo man auch sehr große Daten unterbringen kann. Gerade wenn man Dateien nicht auf dem selben Server speichern möchte oder ein Cluster betreiben will, ist S3 eine gute Alternative zu FTP oder NFS-Laufwerken. Der Server ist über HTTP zu erreichen und es gibt für alle möglichen Sprachen Clients. Eine S3 kompatible Implementierung ist MinIO. Ich hab hier ein kleines Beispiel gebaut, wo ich ein Bild hochlade und wieder downloade und danach alles auch wieder aufräume. Metadata habe ich auch genutzt. Wenn man komplexere Anwendungen hat wird man wohl eher nicht SaveAs verwenden sondern den mitgelieferten Stream aus dem Array verwenden.

Das Minio Docker-Image:

sudo docker pull minio/minio
sudo docker run -p 9080:9000 -e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" -e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" minio/minio server /data


Der S3-Client für PHP:

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



meine test.php:

<?php
require 'vendor/autoload.php';

if(file_exists('./testdata/down.png')){
unlink('./testdata/down.png');
}

$s3 = new Aws\S3\S3Client([
'version' => 'latest',
'region' => 'us-east-1',
'endpoint' => 'http://localhost:9080',
'use_path_style_endpoint' => true,
'credentials' => [
'key' => 'AKIAIOSFODNN7EXAMPLE',
'secret' => 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
],
]);

try{
$s3->createBucket([
'Bucket' => 'testimagebucket'
]);
$s3->waitUntil('BucketExists', ['Bucket' => 'testimagebucket']);
}
catch(Exception $e){
echo $e->getMessage();
}

$insert = $s3->putObject([
'Bucket' => 'testimagebucket',
'Key' => 'image01',
'SourceFile' => './testdata/test_01.png',
'Metadata' => [
'Filename' => 'test_01.png',
],
]);

echo "Uploaded the image\n";

$retrive = $s3->getObject([
'Bucket' => 'testimagebucket',
'Key' => 'image01',
'SaveAs' => './testdata/down.png'
]);

echo "Saved " . $retrive['Metadata']['Filename'] . " to down.png\n";

try{
$s3->deleteObject([
'Bucket' => 'testimagebucket',
'Key' => 'image01',
]);
$s3->deleteBucket(['Bucket' => 'testimagebucket']);
}
catch(Exception $e){
echo $e->getMessage();
}
User annonyme 2019-06-20 22:23

write comment:
Four + = 7

Möchtest Du AdSense-Werbung erlauben und mir damit helfen die laufenden Kosten des Blogs tragen zu können?