subir s3client read putobject getobjecturl example aws archivos php sdk amazon-s3 amazon-web-services

s3client - AWS PHP SDK Versión 2 S3 putObject Error



s3 putobject public read (1)

Por lo tanto, la biblioteca AWS php sdk 2.x ha sido lanzada recientemente y he tomado un día de pavo en la actualización de 1.5x. Mi primera era actualizar mi clase de copia de seguridad S3. Me encontré rápidamente con un error:

Fatal error: Class ''EntityBody'' not found in /usr/share/php/....my file here

cuando intenta subir un archivo comprimido a un depósito S3. Escribí una clase para abstraer un poco la escritura para permitir la copia de seguridad de varias regiones, por lo que el código a continuación hace referencia a $ this are that.

$response1 = $s3->create_object( $this->bucket_standard, $this->filename, array( ''fileUpload'' => $this->filename, ''encryption'' => ''AES256'', //''acl'' => AmazonS3::ACL_PRIVATE, ''contentType'' => ''text/plain'', ''storage'' => AmazonS3::STORAGE_REDUCED, ''headers'' => array( // raw headers ''Cache-Control'' => ''max-age'', //''Content-Encoding'' => ''gzip'', ''Content-Language'' => ''en-US'' //''Expires'' => ''Thu, 01 Nov 2012 16:00:00 GMT'' ), ''meta'' => array( ''param1'' => $this->backupDateTime->format(''Y-m-d H:i:s''), // put some info on the file in meta tags ''param2'' => $this->hostOrigin ) ) );

Lo anterior funcionó bien en 1.5.x.

Ahora, en 2.x, estoy investigando sus documentos y han cambiado prácticamente todo (genial ... máximo sarcasmo)

$s3opts=array(''key''=> $this->accessKey, ''secret'' => $this->secretKey,''region'' => ''us-east-1''); $s3 = Aws/S3/S3Client::factory($s3opts);

así que ahora tengo un nuevo objeto S3. Y aquí está mi sintaxis 2.x para hacer exactamente lo mismo. Mi problema surge cuando (siniestramente) cambiaron la antigua "carga de archivos" por "Cuerpo" y la hicieron más abstracta en cómo adjuntar un archivo. He intentado con ambos y estoy pensando que tiene que ver con las dependencias (Guzzle o Smyfony, etc.), pero obtengo el error anterior (o sustituyo a Stream si lo desea) cada vez que intento ejecutar esto.

Intenté usar Composer con composer.json y aws.phar, pero antes de entrar en eso, ¿hay algo tonto que me estoy perdiendo?

$response1 = $s3->putObject(array( ''Bucket'' => $this->bucket_standard, ''Key'' => $this->filename, ''ServerSideEncryption'' => ''AES256'', ''StorageClass'' => ''REDUCED_REDUNDANCY'', ''Body'' => EntityBody::factory(fopen($this->filename, ''r'')), //''Body'' => new Stream(fopen($fullPath, ''r'')), ''MetaData'' => array( ''BackupTime'' => $this->backupDateTime->format(''Y-m-d H:i:s''), // put some info on the file in meta tags ''HostOrigin'' => $this->hostOrigin ) ));

Gracias como siempre,

R


¿Importó EntityBody en su espacio de nombres?

use Guzzle/Http/EntityBody;

De lo contrario, tendrías que hacer

''Body'' => /Guzzle/Http/EntityBody::factory(fopen($this->filename, ''r'')),