Sto scrivendo la parte server di un web proxy in Java, ho bisogno di codificare con MIME le immagini da spedire ai browser client. Come posso fare? Esiste un metodo java adatto al mio caso?
Sto scrivendo la parte server di un web proxy in Java, ho bisogno di codificare con MIME le immagini da spedire ai browser client. Come posso fare? Esiste un metodo java adatto al mio caso?
up
Intendi, convertire i byte dell'immagine con la codifica Base64?
Tempo fa ho trovato questa utilissima classe, che ho utilizzato per scrivere un'applicazione per l'invio di e-mail:
Ciao.codice:import java.io.*; public class MIMEBase64 { static String BaseTable[] = { "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P", "Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f", "g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v", "w","x","y","z","0","1","2","3","4","5","6","7","8","9","+","/" }; public static void encode(String filename, BufferedWriter out) { try { File f = new File(filename); FileInputStream fin = new FileInputStream(filename); // read the entire file into the byte array byte bytes[] = new byte[(int)(f.length())]; int n = fin.read(bytes); if (n < 1) return; // no bytes to encode!?! byte buf[] = new byte[4]; // array of base64 characters int n3byt = n / 3; // how 3 bytes groups? int nrest = n % 3; // the remaining bytes from the grouping int k = n3byt * 3; // we are doing 3 bytes at a time int linelength = 0; // current linelength int i = 0; // index // do the 3-bytes groups ... while ( i < k ) { buf[0] = (byte)(( bytes[i] & 0xFC) >> 2); buf[1] = (byte)(((bytes[i] & 0x03) << 4) | ((bytes[i+1] & 0xF0) >> 4)); buf[2] = (byte)(((bytes[i+1] & 0x0F) << 2) | ((bytes[i+2] & 0xC0) >> 6)); buf[3] = (byte)( bytes[i+2] & 0x3F); send(out, BaseTable[buf[0]]); send(out, BaseTable[buf[1]]); send(out, BaseTable[buf[2]]); send(out, BaseTable[buf[3]]); if ((linelength += 4) >= 76) { send(out, "\r\n"); linelength = 0; } i += 3; } // deals with with the padding ... if (nrest==2) { // 2 bytes left buf[0] = (byte)(( bytes[k] & 0xFC) >> 2); buf[1] = (byte)(((bytes[k] & 0x03) << 4) | ((bytes[k+1] & 0xF0) >> 4)); buf[2] = (byte)(( bytes[k+1] & 0x0F) << 2); } else if (nrest==1) { // 1 byte left buf[0] = (byte)((bytes[k] & 0xFC) >> 2); buf[1] = (byte)((bytes[k] & 0x03) << 4); } if (nrest > 0) { // send the padding if ((linelength += 4) >= 76) send(out, "\r\n"); send(out, BaseTable[buf[0]]); send(out, BaseTable[buf[1]]); // Thanks to R. Claerman for the bug fix here! if (nrest==2) { send(out, BaseTable[buf[2]]); } else { send(out, "="); } send(out, "="); } out.flush(); } catch (Exception e) { e.printStackTrace(); } } public static void send(BufferedWriter out, String s) { try { out.write(s); } catch (Exception e) { e.printStackTrace(); } } }
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Mmm...non mi funziona...o meglio, sembra codificare in formato MIME i file, ma poi il browser che riceve il file codificato mi dice che l'immagine contiene errori e non può essere visualizzata. Qualche idea del perchè?
Probabilmente perche' non decodifica opportunamente l'immagine ricevuta.Originariamente inviato da mxa
Mmm...non mi funziona...o meglio, sembra codificare in formato MIME i file, ma poi il browser che riceve il file codificato mi dice che l'immagine contiene errori e non può essere visualizzata. Qualche idea del perchè?
Mi sembra strano comunque che non vi siano delle classi java ad hoc per fare sia la codifica che la decodifica.
Molto strano... io la utilizzo tranquillamente per inviare file di ogni genere e non ho mai avuto problemi.Originariamente inviato da mxa
Mmm...non mi funziona...o meglio, sembra codificare in formato MIME i file, ma poi il browser che riceve il file codificato mi dice che l'immagine contiene errori e non può essere visualizzata. Qualche idea del perchè?
Anch'io credo che da qualche parte esista qualcosa, ma non l'ho ancora trovato. (Tempo fa mi pareva di aver visto qualcosa del genere, ma se non ho delle mie prove, significa che per un qualche motivo non facevano al caso mio).Mi sembra strano comunque che non vi siano delle classi java ad hoc per fare sia la codifica che la decodifica.
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza