Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

434
Vistas
Subir imagen base64 a amazon s3

Tengo algunos problemas al intentar cargar una imagen en AWS S3. Parece cargar el archivo correctamente pero, cada vez que intento descargarlo o obtener una vista previa, no se puede abrir. Actualmente, este es el código de carga que estoy usando:

 <?php require_once 'classes/amazon.php'; require_once 'includes/aws/aws-autoloader.php'; use Aws\S3\S3Client; $putdata = file_get_contents("php://input"); $request = json_decode($putdata); $image_parts = explode(";base64,", $request->image); $image_type_aux = explode("image/", $image_parts[0]); $image_type = $image_type_aux[1]; $image_base64 = $image_parts[1]; $dateTime = new DateTime(); $fileName = $dateTime->getTimestamp() . "." . $image_type; $s3Client = S3Client::factory(array( 'region' => 'eu-west-1', 'version' => '2006-03-01', 'credentials' => array( 'key' => Amazon::getAccessKey(), 'secret' => Amazon::getSecretKey(), ) )); try { $result = $s3Client->putObject(array( 'Bucket' => Amazon::getBucket(), 'Key' => 'banners/' . $fileName, 'Body' => $image_base64, 'ContentType' => 'image/' . $image_type, 'ACL' => 'public-read' )); echo $result['ObjectURL'] . "\n"; } catch(S3Exception $e) { echo $e->getMessage() . "\n"; } ?>

Entonces, cuando reviso la consola después de cargar el archivo de imagen, tiene el tamaño, los permisos y los encabezados esperados pero, como dije, cada vez que intento abrir el archivo, falla.

Cual podría ser el problema aquí? Gracias por adelantado.

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

El problema aquí es que parece estar cargando la versión codificada en base64 de la imagen y no los bytes sin procesar de la imagen. Tome $image_base64 y decodifique en bytes sin procesar primero http://php.net/manual/en/function.base64-decode.php . Estoy seguro de que si intentara abrir esas "imágenes" en un editor de texto, vería datos hexadecimales base64.

about 4 years ago · Santiago Trujillo Denunciar

0

puede cargar "sobre la marcha" usando la función $s3Client->upload como en el siguiente ejemplo:

 <?php $bucket = 'bucket-name'; $filename = 'image-path.extension'; $imageData = base64_decode(end(explode(",", $base64))); $upload = $s3Client->upload($bucket, $filename, $imageData, 'public-read'); $upload->get('ObjectURL');
about 4 years ago · Santiago Trujillo Denunciar

0

Uso silex php 2.0 y la siguiente fuente de código

 $s3 = $app['aws']->createS3(); $putdata = file_get_contents("php://input"); $data = json_decode($request->getContent(), true); $data = (object) $data; $image_parts = explode(";base64,", $data->image); $image_type_aux = explode("image/", $image_parts[0]); $image_type = $image_type_aux[1]; $image_base64 = base64_decode($image_parts[1]); $result = $s3->putObject([ 'ACL' => 'public-read', 'Body' => $image_base64, 'Bucket' => 'name-bucket', 'Key' => 'test_img.jpeg', 'ContentType' => 'image/' . $image_type, ]); var_dump($result['ObjectURL']);
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda