Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [Java] codifica MIME

    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?
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  2. #2
    up
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,301
    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:
    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();
          }
        }
     }
    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

  4. #4
    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è?
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  5. #5
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    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è?
    Probabilmente perche' non decodifica opportunamente l'immagine ricevuta.
    Mi sembra strano comunque che non vi siano delle classi java ad hoc per fare sia la codifica che la decodifica.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,301
    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è?
    Molto strano... io la utilizzo tranquillamente per inviare file di ogni genere e non ho mai avuto problemi.

    Mi sembra strano comunque che non vi siano delle classi java ad hoc per fare sia la codifica che la decodifica.
    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).


    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.