Guardar la imagen de base64encoded a la base de datos del servidor como BLOB

Estoy tomando una fotografía desde mi aplicación de Android con este código:

if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK){ photo = (Bitmap) data.getExtras().get("data"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); photo.compress(Bitmap.CompressFormat.JPEG, 40, baos); byte[] photoByte = baos.toByteArray(); encodedImage = Base64.encodeToString(photoByte,Base64.DEFAULT); } 

Estoy enviando esta String encodedImage a mi servidor PHP a través de POST y lo recibo a $encodedImage . Tengo una base de datos donde tengo un campo myImage del tipo MEDIUMBLOB . He intentado guardar la imagen encodedimage en myImage pero se guarda como imagen dañada. Intenté ahorrar como base64_decode($encodedImage) pero de alguna manera eso no trabajó tampoco.

Quiero que se hagan tres cosas:

  • Guardar imagen en la base de datos del servidor (BLOB)

  • Mostrar imagen a una página web

  • Envíela de vuelta a la aplicación de Android.

Estoy haciendo frente a problemas en la comprensión de la conversión de la imagen requerida en diversos formatos para las tareas antedichas.

Para mi proyecto actual, no quiero guardar mi imagen en la carpeta y dar enlace a la base de datos, por lo que la opción está cerrada para mí.

Mi código PHP para guardar la imagen:

 $baseImage = $_POST['baseImage']; $blobImage = base64_decode($baseImage); $query = "INSERT INTO `complaints`(`myImage`,...) VALUES ('$blobImage',...)" $result = mysqli_query($conn,$query); 

Prefijo de SQL con la palabra clave _binary "

 $query = "INSERT INTO `complaints` (`myImage`,...) VALUES (_binary'".addcslashes($blobImage, "\x00\'\"\r\n")."',...)" 

Además, configure un entorno de prueba con CURL para que pueda reproducir imágenes codificadas en base64 repetidamente. Esto va a ser un caso en el que necesita un montón de depuración.

 <?php $f = fopen('sample.jpg.base64.txt', 'w'); $i = fopen('sample.jpg', 'r'); if (!$i) { die("cannot open sample.jpg\n"); } $bytes = ''; while ( ! feof($i)) { $bytes .= fread($i, 4096); } fclose($i); fputs($f, base64_encode( $bytes ) ); fclose($f); 

Y luego usar curl para publicarlo repetidamente y depurar su PHP

 curl -X PUT "http://localhost/myimport.php" -F "baseImage=@./sample.jpg.base64.txt" 

Ajuste su script PHP para simplemente escribir los datos en un archivo de su disco duro e inspeccionarlo allí. Escriba varias versiones, tanto codificadas como decodificadas.

Personalmente, no base64 los bytes va de Android a PHP, pero yo base64 codificarlos en mysql.

No descodifique su imagen en PHP, guárdela como la reciba, Ahora, en frontend puede imprimir la imagen como sigue

 <?php $img = '<img src="data:image/jpeg;base64,' . $encodedImgStoredInDB . '">'; print $img; ?> 
  • Android sqlite CREATE TABLE SI NO EXISTE
  • Actualizar una columna como suma de otras dos columnas
  • ¿Qué es MINI_THUMB_MAGIC y cómo usarlo?
  • Creación de una base de datos SQL de varias tablas en android
  • Base de datos SQLite en android y java
  • Limitar el número de filas devueltas desde sqlite
  • Enviar la imagen de Base64 desde Android con JSON a php webservice, decodificar, guardar en SQL
  • Android - ¿Cómo puedo ver una base de datos SQL creada en mi aplicación? Lo estoy ejecutando en el emulador de Android de Eclipse
  • Cómo comprobar si BLOB es nulo
  • CursorWindowAllocationException en el método ORMLite estándar
  • Android con SQL Server 2008
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.