30/06/2018 - PHP, SYMFONY
Symfony uygulamalarında AWS SDK for PHP kütüphanesini kullanarak AWS S3 kovalarına dosya atmak isterseniz, aşağıdaki örneği kullanabilirsiniz. Biz bu örnekte kovaya bir video dosyası atacağız. Daha fazla bilgi için Get an Object Using the AWS SDK for PHP sayfasını okuyun.
Öncelikle, kovaların ve klasörlerinin içeriğinin tarayıcılarda listelenmesini önlemek istiyoruz. Bu özelliği sağlamak için, kovaya "Bucket Policy" eklememiz gerekiyor. Eğer "Permissions -> Bucket Policy" sekmesine giderseniz, sayfanın alt kısmında "Policy generator" butonunu görürsünüz. Bu butonu kullanırsanız, uygun bir policy oluşturabilirsiniz. İstemiyorsanız, yalnızca aşağıdaki policyi kopyalayıp yapıştırabilirsiniz. Kovamızın my-videos
olduğunu varsayıp herkesin GetObject
iznine sahip olmasını istiyoruz. Not: "Public access" bölümündeki "Everyone" seçeneğinde hiçbir şekilde izin verilmediğinden emin olun.
{
"Version": "2012-10-17",
"Id": "Policy1530100021111",
"Statement": [
{
"Sid": "Stmt1530100001111",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-videos/*"
}
]
}
Eğer isterseniz kovanın tamamını varsayılan olarak "private" olarak atayabilirsiniz. Daha sonra yükleme sırasında nesneleri "public" hale getirmek için putObject
fonksiyonuna 'ACL' => 'public-read'
özelliğini ekleyebilirsiniz.
# User: These credentials belong to "AmazonS3FullAccess" user.
AWS_KEY=AMAZON000KEY
AWS_SECRET=AMAZON000SECRET
AWS_IMAGE_BUCKET=my-images-bucket
parameters:
# AWS SDK
aws_sdk:
version: 'latest'
region: 'eu-west-2'
credentials:
key: '%env(AWS_KEY)%'
secret: '%env(AWS_SECRET)%'
services:
_defaults:
autowire: true
autoconfigure: true
public: false
...
Aws\Sdk:
arguments:
- '%aws_sdk%'
declare(strict_types=1);
namespace App\Util\Aws;
use Aws\Sdk;
abstract class AwsUtil
{
protected $sdk;
public function __construct(Sdk $sdk)
{
$this->sdk = $sdk;
}
}
declare(strict_types=1);
namespace App\Util\Aws;
use App\Exception\AwsUtilException;
use Aws\S3\Exception\S3Exception;
class AwsS3Util extends AwsUtil
{
public function putObject(string $bucket, string $path, string $name): string
{
try {
$client = $this->sdk->createS3();
$result = $client->putObject(['Bucket' => $bucket, 'Key' => $name, 'SourceFile' => $path]);
$client->waitUntil('ObjectExists', ['Bucket' => $bucket, 'Key' => $name]);
return $result['ObjectURL'];
} catch (S3Exception $e) {
throw new AwsUtilException($e->getMessage());
}
}
}
putObject('my-videos', '/local/path/app/hello.mp4', 'hello.mp4')
Daha sonra videoya erişmek için yanıt içinde gelen URL'yi kullanabilirsiniz.