2011-08-01 5 views
0
다음

내 코드입니다 : POST 요청이 이미 이루어집니다 내가 showDocument 메소드를 사용하는 시간으로자바 : 페이지를 표시하는 동안 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); 
     } 

그래서 내가 정말 빈 페이지 (대신, 나는 이미지를 보여주고 싶은) 보여주는하고 있어요 . 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의 일부로 보내면 어쨌든 작동하지만 웹 서버의 URL 데이터 또는 Java-Plugin의 링크 길이에 제한이있을 수 있습니다. 브라우저.

data: URL에 이미지를 인코딩 한 다음 showDocument에 사용할 수 있습니다.

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

(자바의 URL 클래스는 실제로이. 시도하십시오 및 보고서. 나는 그것이 같은 브라우저의 URL 길이 제한이 적용됩니다 가정 받아 만약 내가 테스트하지 않았다.)


대안이 될 것이다 서버가 이미지를 저장할 때 (최소한 짧은 시간 동안). 그런 다음 애플릿의 POST를 사용하여 데이터를 업로드하고 몇 가지 고유 한 식별자를 가져와 showDocument URL로 전달합니다.

2

Java에서 POST를 사용하고 PHP에서 가져 오기 ...

관련 문제