2012-02-18 16 views
5

Tengo un servlet que ha redimensionado y codificado una imagen en base64. Me codificarlo como estoDevolución de devolución de carro Descodificación Base64 desde Java y envío al navegador

BufferedImage newBuf = .. a bufferedImage... 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ImageIO.write(bufferedImage, sImgFormat, baos); 
baos.flush(); 
imageInBytes = baos.toByteArray(); 

entonces puedo codificar esto en base 64 para enviar al navegador como esto

sun.misc.BASE64Encoder encoder = new BASE64Encoder(); 
String sEncImage = "data:image/jpg;base64," + encoder.encodeBuffer(imageInBytes); 

El navegador recibirá la codificación y funciona a excepción de los retornos de carro, ("\ n ") incrustado consistentemente dentro de la cadena que corrompe la imagen. Cuando elimino el carro, la imagen está bien. ¿Hay alguna manera de generar la codificación sin los retornos de carro? ¿O debo filtrarlo yo mismo antes de devolverlo?

(estoy usando J2SE 1.4.2 y la necesidad de seguir haciéndolo)

+0

¿Por qué no enviar la secuencia de bytes? – Alanmars

+0

Necesito enviar texto de base64 al navegador. HTML5 en el otro extremo – giulio

+0

\ n no es un carácter de retorno de carro, es un avance de línea. es el retorno de carro https://stackoverflow.com/questions/3091524/what-are-carriage-return-linefeed-and-form-feed – Achille

Respuesta

4

Sospecho que el sun.misc.Base64encoder se CHUNKING la salida. No utilizaría las clases sun.misc ya que restringe su código a Oracle JVM (por ejemplo, funcionaría en IBM Websphere). Usaría el codificador commons Base64 o Base64OutputStream.

+0

Cuando quiere decir "fragmentar" está poniendo un delimitador "\ n" después de cada "fragmento". Entonces, ¿el commons Base64 proporcionaría una conversión base64 "pura"? – giulio

+0

Las clases sun.misc no existen en las JVM que no son de Oracle mientras que las comunes Base64 funcionan en todas las JVM. Sí, Chunking hace un retorno de carro después de cada 76 caracteres. – beny23

+0

Ok. Solo para confirmar, el códec de commons es compatible desde 1.4? – giulio

Cuestiones relacionadas