2011-11-24 15 views
9

Estoy obteniendo una cadena JPEG codificada en base64 a través de una solicitud POST a mi servicio web. Quiero decodificarlo y guardarlo en el sistema de archivos. ¿Cómo puedo lograr esto usando PHP 5.3. Soy capaz de decodificar exitosamente los datos usando la función base64_decode.Cómo guardar una imagen decodificada en base64 en el sistema de archivos usando php?

¿Cómo puedo guardar esta cadena decodificada como una imagen JPEG en el servidor?

Gracias de antemano.

+0

¿Intentó guardar esto en un archivo binario usando fopen? – Arfeen

+0

@Arfeen Gracias, probé file_put_contents() y funcionó. Vine aquí para actualizar mi pregunta y observar sus comentarios y los de Lawrence Cherone. – Amit

+0

Como una solución general que es mucho más flexible y potente, [PHP-FileUpload] (https://github.com/delight-im/PHP-FileUpload/tree/master) viene con ambos ['Base64Upload'] (https: //github.com/delight-im/PHP-FileUpload/blob/7c950635cbd45ade9fb2656eb285259dc2a8f0fb/src/Base64Upload.php) y ['DataUriUpload'] (https://github.com/delight-im/PHP-FileUpload/blob/7c950635cbd45ade9fb2656eb285259dc2a8f0fb /src/DataUriUpload.php), que están [documentados aquí] (https://github.com/delight-im/PHP-FileUpload/blob/master/README.md#usage). – caw

Respuesta

12

Si está seguro de la imagen siempre será jpg, entonces puede simplemente usar: file_put_contents();

<?php 
$decoded=base64_decode($encodedString); 

file_put_contents('newImage.JPG',$decoded); 
//leave it to you to randomize the filename. 
?> 
+0

Muchas gracias. Funciona. Sin embargo, no se garantiza que siempre sea un archivo JPEG. Trataré de ver si puedo obtenerlo del tipo MIME. :) ¡Apreciar la ayuda! – Amit

8

Sustitución de los espacios en blanco con el signo + que se requiere si los datos se deriva de la función() canvas.toDataURL.

$encodedString = str_replace(' ','+',$encodedString); 

See this question

Me ayudó mucho en mi caso.

+0

necesita decodificar la cadena. – FabianoLothor

Cuestiones relacionadas