2012-02-18 9 views
5

Ho un servlet che ha ridimensionato e codificato un'immagine in base64. Mi codificare come questoDecodifica problema di ritorno a capo Base64 da Java e invio al browser

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

Ho poi codificare questo in Base64 per inviare al browser come questo

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

Il browser riceverà la codifica e funziona tranne che per i ritorni a capo, ("\ n ") incorporato in modo coerente all'interno della stringa che corrompe l'immagine. Quando rimuovo il carrello, l'immagine è a posto. C'è un modo per generare la codifica senza i ritorni a capo. O devo filtrarlo io stesso prima di rispedirlo?

(sto usando J2SE 1.4.2 e la necessità di continuare a farlo)

+0

Perché non inviare flussi di byte? – Alanmars

+0

Devo inviare il testo base64 al browser. HTML5 all'altra estremità – giulio

+0

\ n non è un carattere di ritorno a capo, è un avanzamento di riga. \ r è il ritorno a capo. https://stackoverflow.com/questions/3091524/what-are-carriage-return-linefeed-and-form-feed – Achille

risposta

4

Ho il sospetto che il sun.misc.Base64encoder è chunking l'uscita. Non userei le classi sun.misc in quanto limita il codice a Oracle JVM (ad esempio, funzionerebbe in IBM Websphere). Vorrei usare il codificatore Base64 o Base64OutputStream.

+0

Quando si intende "chunking", viene inserito un delimitatore "\ n" dopo ogni "blocco". Quindi il Base64 di base avrebbe fornito una conversione "pura" di base64? – giulio

+0

Le classi sun.misc non esistono nelle JVM non Oracle mentre i comuni Base64 funzionano in tutte le JVM. Sì, il chunking inserisce un ritorno a capo dopo ogni 76 caratteri. – beny23

+0

Ok. Giusto per confermare, il codec commons è compatibile da 1.4? – giulio

Problemi correlati