Использование s3-серверного шифрования с помощью PHP

Я решил использовать азаботы нового шифрования на стороне сервера с помощью s3, однако у меня возникла проблема, которую я не могу решить.

Я использую класс PHP s3, найденный здесь: https://github.com/tpyo/amazon-s3-php-class

Я использовал этот код для первоначального размещения объектов (и он работал):

S3::putObjectFile($file, $s3_bucket_name, $file_path, S3::ACL_PRIVATE, array(), array( "Content-Disposition" => "attachment; filename=$filename", "Content-Type" => "application/octet-stream" ) ); 

Затем я сделал следующее: http://docs.amazonwebservices.com/AmazonS3/latest/API/index.html?RESTObjectPUT.html и добавил заголовок запроса « x-amz-server-side -encryption ». Но теперь, когда я пытаюсь поместить объект, он выходит из строя без ошибок.

Мой новый код:

  S3::putObjectFile($file, $s3_bucket_name, $file_path, S3::ACL_PRIVATE, array(), array( "Content-Disposition" => "attachment; filename=$filename", "Content-Type" => "application/octet-stream", "x-amz-server-side​-encryption" => "AES256" ) 

);

Кто-нибудь экспериментировал с этой новой функцией или может кто-нибудь увидеть ошибку в коде.

Приветствия.

Related of "Использование s3-серверного шифрования с помощью PHP"

Этот заголовок должен быть частью массива $metaHeaders а не массивом $requestHeaders .

 S3::putObjectFile($file, $s3_bucket_name, $file_path, S3::ACL_PRIVATE, array( "x-amz-server-side​-encryption" => "AES256" ), array( "Content-Disposition" => "attachment; filename=$filename", "Content-Type" => "application/octet-stream" ) ); 

Вот определение метода из документов :

 putObject (mixed $input, string $bucket, string $uri, [constant $acl = S3::ACL_PRIVATE], [array $metaHeaders = array()], [array $requestHeaders = array()]) 

Вы также можете использовать SDK для PHP ?

Мы можем загружать файлы с помощью шифрования, используя следующий код: $s3->create_object($bucket_name,$destination,array( 'acl'=>AmazonS3::ACL_PUBLIC, 'fileUpload' => $file_local, 'encryption'=>"AES256"));

И вы можете скачать последнюю версию sdk отсюда

С официальным SDK:

 use Aws\S3\S3Client; $bucket = '*** Your Bucket Name ***'; $keyname = '*** Your Object Key ***'; // $filepath should be absolute path to a file on disk $filepath = '*** Your File Path ***'; // Instantiate the client. $s3 = S3Client::factory(); // Upload a file with server-side encryption. $result = $s3->putObject(array( 'Bucket' => $bucket, 'Key' => $keyname, 'SourceFile' => $filepath, 'ServerSideEncryption' => 'AES256', )); 

Изменение серверного шифрования существующего объекта (операция копирования)

 use Aws\S3\S3Client; $sourceBucket = '*** Your Source Bucket Name ***'; $sourceKeyname = '*** Your Source Object Key ***'; $targetBucket = '*** Your Target Bucket Name ***'; $targetKeyname = '*** Your Target Object Key ***'; // Instantiate the client. $s3 = S3Client::factory(); // Copy an object and add server-side encryption. $result = $s3->copyObject(array( 'Bucket' => $targetBucket, 'Key' => $targetKeyname, 'CopySource' => "{$sourceBucket}/{$sourceKeyname}", 'ServerSideEncryption' => 'AES256', )); 

Источник: http://docs.aws.amazon.com/AmazonS3/latest/dev/SSEUsingPHPSDK.html

С laravel 5+ это можно легко сделать с помощью файловой системы config.php, вам не нужно получать драйвер или объект низкого уровня.

 's3' => [ 'driver' => 's3', 'key' => "Your Key", 'secret' => "Your Secret", 'region' => "Bucket Region", 'bucket' => "Bucket Name", 'options' => [ 'ServerSideEncryption' => 'AES256', ] ], //Code $disk->put("filename", "content", "public"); // will have AES for file