2011-08-01 11 views
0

が私のコードです:Java:ページの表示中にPOSTリクエストを送信する方法は?ここで

try 
     { 
      ByteArrayOutputStream os = new ByteArrayOutputStream(); 
      ImageIO.write(image, "png", os); 

      byte[] bytes = os.toByteArray(); 

      os.flush(); 
      os.close(); 

      String code = encode(bytes); 

      URL base = applet.getCodeBase(); 
      URL url = new URL(base.getProtocol(), 
       base.getHost(), 
       base.getPort(), 
       "/image.php?code=" + code); 


      HttpURLConnection c = (HttpURLConnection) url.openConnection(); 
      c.setRequestMethod("POST"); 
      c.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
      c.setDoOutput(true); 

      DataOutputStream s = new DataOutputStream(c.getOutputStream()); 
      s.writeBytes("code=" + code); 

      applet.getAppletContext().showDocument(url, "_blank"); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 

      JOptionPane.showMessageDialog(
       this, 
       e.toString(), 
       "Error", 
       JOptionPane.ERROR_MESSAGE); 
     } 

私はのshowDocumentを使用する時までに、POSTリクエストが(代わりに、私は画像を表示する)は既に行われているので、私が実際にやっていると、空白のページが表示されます。 image.phpのソースはこれです:

<?php 
$code = base64_decode($_GET["code"]); 
header('Content-Type: image/png'); 
echo $code; 
?> 

答えて

0

あなたshowDocumentおよびアプレットのPOST要求は完全に独立しています。 POSTリクエストはあなたのアプレットによって行われ、結果はあなたのアプレット内でのみ使用可能になります(ただし、あなたはそれを全く読んでいません - それは送信されているかどうかわかりません)。

showDocumentと対照的に、常にGETリクエストがあります。ここにPOSTを使用するようブラウザに指示する方法はありません。ただし、アプレットのJavaScriptブリッジを使用して、新しいHTMLページのPOSTリクエストを作成することができます。

理論的には、イメージデータをURLの一部として送信すると、理論的にはうまくいくはずですが、WebサーバーのURLデータ、またはJava-Pluginからブラウザ。

data: URLに画像をエンコードし、showDocumentに使用することもできます。

URL url = new URL("data:image/png;base64," + code); 

(JavaのURLクラスは、実際にこれを受け入れた場合、私はテストしていない。試してみて、レポートしてください。私はそれが同じブラウザのURLの長さ制限の対象であると仮定します。)


選択肢だろうサーバに画像を保存させる(少なくともある程度の時間は)。次に、アプレットのPOSTを使用してデータをアップロードし、一意の識別子を取得して(短い)、showDocument URLに渡します。

2

JavaでPOSTを使用し、PHPでGETを使用しています...

関連する問題