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'')),