Trimiterea imaginii canalului HTML5 ca imagine încorporată în e-mail pe motorul de aplicații Google

Rulez o aplicație în Java pe GWT + GAE

Vreau să obțin conținutul html5 Canvas (clasa GWT Canvas) și să le salvez într-un fișier permanent și adresabil web

Example: http://myserver.com/images/image_434.png

Când primesc conținutul canvasului folosind canvas2.toDataUrl() ...

1 - Este posibil să postați acel conținut într-un API web PHP prin intermediul unei cereri HTTP și apoi să utilizați PHP (pe serverul meu) pentru a decoda imaginea pe 64 de biți și să o scrieți în fișier și să reveniți înapoi la un permalink.

Sau

2 - Este posibil să trimiteți datele de imagine ale RPC pe server, să le salvați într-un fișier (ImageIO este blocat în GAE) și apoi să încorporați acel fișier cumva într-un e-mail și să-l trimiteți prin e-mail pe serverul meu.

Sunt confuză pentru că:

Metoda 1: Mă îndoiesc că va funcționa, postând un parametru atât de lung, nu sunt sigur, dar am un sentiment care nu va funcționa.

Metoda 2: Dacă îmi dau seama cum să încorporați imaginea în e-mail fără a avea un URL de fișier solid (prin scrierea directă a fluxului către corpul mesajului direct), probabil că ar funcționa.

As you can see, I'm generally confused about this. It shouldn't be this hard to do this and I can't be the only one trying to do this... though I've been searching fSau3 days now.

Mulțumiri

0
da ... de fapt mi-am dat seama că o să-l editez/răspund
adăugat autor Haitham Alhumsi, sursa
Vrei să spui "imagine encoded Base64" mai degrabă decât "imagine 64bit"?
adăugat autor Greg Kopff, sursa

1 răspunsuri

  • Partea client (GWT):

1 - Obțineți URI-ul imaginii codate base64

String imageData= canvas2.toDataUrl();

2 - Trimiteți datele de imagine printr-un apel RPC către partea serverului

jdbc.saveImage(imageData,callback); 
  • Server Side (GAE):

3. Efectuați o solicitare HTTP Post pe API-ul serverului dvs. web

        URL url = new URL("http://myserver.com/my_images_folder/save_image.php");
        URLConnection conn = url.openConnection();
        conn.setReadTimeout(15000); //set a large time out since we're saving images
        conn.setDoOutput(true);
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(data);
        wr.flush();

       //Get the response which contains the image file name
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line;
        while ((line = rd.readLine()) != null) {
            resa+=line;
        }
        wr.close();
        System.out.println("close1");
        rd.close();
        System.out.println("Received: "+line);
  • Server Side (serverul Web -php API):

4 salvați imaginea pe serverul de fișiere și returnați un nume de fișier imagine

    if (isset($GLOBALS["HTTP_RAW_POST_DATA"])){
        $imageData=$GLOBALS['HTTP_RAW_POST_DATA'];

        //using a timestamp to create unique file names
        //you can pass file name in params if you like instead
        $fileName='User_Images_'.time().'.png';

       //Remove the headers (data:,) part.  
        $filteredData=substr($imageData, strpos($imageData, ",")+1);

       //Need to decode base64 encoded image
        $unencodedData=base64_decode($filteredData);

        $fp = fopen( $fileName, 'wb' );
        fwrite( $fp, $unencodedData);
        fclose( $fp );
    $fileName2='http://myserver.com/my_images_folder/'.$fileName;

    //return the file name
    echo($fileName);
 }else{
    echo('no data posted');
 }

Acum, că am un dosar greu la dosar, îl pot încorpora în e-mailuri și pot face alte lucruri cu el. Vedeți referința 3 de mai jos pentru încorporarea inline (care necesită un fișier sau o adresă URL, acum că avem o adresă URL greu pentru imaginea de pe serverul nostru web, o putem trimite prin e-mail)

0
adăugat
adăugat autor Haitham Alhumsi, sursa
adăugat autor Haitham Alhumsi, sursa
adăugat autor Haitham Alhumsi, sursa