2012-02-18 20 views
5

Mam serwlet, który zmienił rozmiar i zakodował obraz w base64. Zakodować go jak tenDekodowanie powrotu wydania powozu Base64 z Java i wysyłanie do przeglądarki

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

I wtedy zakodować to w base64 wysłać do przeglądarki jak to

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

Przeglądarka otrzyma kodowanie i działa z wyjątkiem powrotu karetki ("\ n ") osadzone konsekwentnie w ciągu znaków, który powoduje uszkodzenie obrazu. Po usunięciu powozu obraz jest w porządku. Czy istnieje sposób generowania kodowania bez powrotu karetki? Czy muszę go sam odfiltrować przed odesłaniem?

(używam J2SE 1.4.2 i muszą nadal to robić)

+0

Dlaczego nie wysłać strumienia bajtów? – Alanmars

+0

Muszę wysłać tekst base64 do przeglądarki. HTML5 na drugim końcu – giulio

+0

\ n nie jest znakiem powrotu karetki, jest to wiersz. \ r oznacza powrót karetki. https://stackoverflow.com/questions/3091524/what-are-carriage-return-linefeed-and-form-feed – Achille

Odpowiedz

4

Podejrzewam, że sun.misc.Base64encoder jest wyrwy wyjście. Nie użyłbym klas sun.misc, ponieważ ogranicza on kod do maszyn JVM Oracle (na przykład działałby w środowisku IBM Websphere). Użyłbym enkodera Base64 lub Base64OutputStream.

+0

Kiedy masz na myśli "chunking", umieszczasz separator "\ n" po każdym "kawałku". Więc wspólnota Base64 zapewnia "czystą" konwersję base64? – giulio

+0

Klasy sun.misc nie istnieją w nieblokowanych JVM, podczas gdy wspólnoty Base64 działają we wszystkich maszynach JVM. Tak granie powoduje powrót karetki po każdych 76 znakach. – beny23

+0

Ok. Aby potwierdzić, kodek commons jest kompatybilny z 1.4? – giulio