0

GWT + GAE で Java でアプリケーションを実行しています

html5 Canvas (GWT Canvas クラス) のコンテンツを取得し、永続的で Web アドレス指定可能なファイルに保存したい

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

canvas2.toDataUrl() を使用してキャンバスの内容を取得すると ...

1-これらのコンテンツをHTTPリクエストを介してPHP Web APIに投稿し、PHP(サーバー上)を使用して64ビット画像をデコードし、ファイルに書き込み、パーマリンクを返すことは可能ですか.

または

2-どうにかしてRPCの画像データをサーバー側に送信し、ファイルに保存して(ImageIOはGAEでブロックされています)、そのファイルを何らかの方法で電子メールに埋め込んでサーバーに電子メールで送信することは可能ですか。

私は混乱しています:

方法 1: うまくいくとは思えませんが、それほど長いパラメーターを投稿することはできません。よくわかりませんが、うまくいかないという直感があります。

方法 2: 確実なファイル URL を持たずにメールに画像を埋め込む方法を理解できれば (何らかの方法でストリームをメッセージ本文に直接書き込むことによって)、おそらくうまくいくでしょう。

ご覧のとおり、私は一般的にこれについて混乱しています。これを行うのはそれほど難しいことではありませんし、これをやろうとしているのは私だけではありません.3日間探していました.

ありがとう

4

1 に答える 1

0
  • クライアント側 (GWT):

1- base64 でエンコードされた画像の URI を取得する

String imageData= canvas2.toDataUrl();

2- RPC 呼び出しを介してサーバー側に画像データを送信する

jdbc.saveImage(imageData,callback); 
  • サーバー側 (GAE):

3- Web サーバー API への HTTP Post 要求を作成します。

        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);
  • サーバー側 (Web サーバー -php API):

4- 画像をファイル サーバーに保存し、画像ファイル名を返す

    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');
 }

ファイルへのハード パーマリンクを作成したので、メールに埋め込んだり、その他の操作を実行したりできます。インライン埋め込みについては、以下の参照 3 を参照してください (ファイルまたは URL が必要です。これで、Web サーバー上の画像へのハード URL が得られたので、メールで送信できます)

于 2012-05-31T13:57:24.890 に答える