Datos codificados base64 enviados a server

Hola, buenas noches, estoy realizando un applet que envía una imagen codificada en base64 a un servidor remoto, la imagen se envía por POST desde el applet, al llegar un script php la reciba y la guarda, todo lo hace muy bien, el único "pequeno" inconveniente es que la imagen me llega incompleta, de 11.590 bytes que pesa la imagen de prueba llegan 11.550 bytes y la imagen no la puede mostrar y dice que esta corrupta, no se que puede ser si se pierden codificandolos en base 64 o con el outputstream, no tengo idea, cualquier ayuda que me pudieras dar te lo agradecería.
att, jaime

1 respuesta

Respuesta
1
Me temo ésta consulta casi va más en la categoría php que en la de Java. En cualquier caso voy a hacer un intento. Basándome en el RFC2045 (http://www.ietf.org/rfc/rfc2045.txt), si lo que envías es una imagen, su "Content-Type:" será del tipo "image/xyz" (donde xyz será gif, jpg, etc...). Al transferirse codificada en base64, tendrás que añadir un campo nuevo: "Content-Transfer-Encoding" que sea del tipo "base64".
Citando a la wikipedia en su artículo sobre base64:
Using a URL-encoder on standard Base64, however, is inconvenient as it will translate the '+' and '/' characters into special percent-encoded hexadecimal sequences ('+' = '%2B' and '/' = '%2F'). When this is later used with database storage or across heterogeneous systems, they will themselves choke on the '%' character generated by URL-encoders (because the '%' character is also used in ANSI SQL as a wildcard).
For this reason, a modified Base64 for URL variant exists, where no padding '=' will be used, and the '+' and '/' characters of standard Base64 are respectively replaced by '-' and '_', so that using URL encoders/decoders is no longer necessary and has no impact on the length of the encoded value, leaving the same encoded form intact for use in relational databases, web forms, and object identifiers in general.

De ahí tomo la idea de que para algunos propósitos, el carácter "+" no es muy adecuado, por lo que supongo que php lo cambiará. Me temo que no tengo idea de qué función has de usar en php para reconocer el signo + de manera correcta en base64. Dr. Google dice que hay funciones especiales de php para reconocer base64 codificado en una url (sin utilizar los +), así que siempre podrías utilizarlas en lugar de la que usas ahora.
Te deseo suerte, y siento no ser de mucha ayuda.
Saludos
Daniel
PD: Por favor, si solucionas el problema comenta aquí cómo lo has hecho.
Hola, después de muchas pruebas descubrí que el string que envío, que es el contenido del archivo de imagen codificado, al recibirlo php cambia en el contenido todos los signos + por un espacio, y creo, no se si me equivoque, que es un problema del servletConnection.setRequestProperty("Content-Type:", type);, si de pronto sabes que debería poner allí para que el signo + no lo cambie te agradecería la información, o si ese no es problema también te agradecería cualquier ayuda que me pudieras dar.
att, Jaime
Hola muchas gracias por su respuesta y por su tiempo, te comento que todavía no lo he solucionado voy a probar tu sugerencia y si lo soluciono te comento muchas gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas