2014-09-23 2 views
0

JSP에 데이터 URI를 저장할 수 없습니다. 나는 이런 식으로 노력하고있다, 다음 코드에 실수가 있는가?JSP로 이미지를 저장할 수 없습니다.

<%@ page import="java.awt.image.*,java.io.*,javax.imageio.*,sun.misc.*" %> 

function save_photo() 
{ 
    Webcam.snap(function(data_uri) 
    { 
     document.getElementById('results').innerHTML = 
       '<h2>Here is your image:</h2>' + '<img src="'+data_uri+'"/>'; 
     var dat = data_uri; 

     <% 
      String st = "document.writeln(dat)"; 

      BufferedImage image = null; 
      byte[] imageByte; 

      BASE64Decoder decoder = new BASE64Decoder(); 
      imageByte = decoder.decodeBuffer(st); 
      ByteArrayInputStream bis = new ByteArrayInputStream(imageByte); 
      image = ImageIO.read(bis); 
      bis.close(); 

      if (image != null) 
       ImageIO.write(image, "jpg", new File("d://1.jpg")); 
      out.println("value=" + st); // here it going to displaying base64 chars 
      System.out.println("value=" + st); //but here it is going to displaying document.writeln(dat) 
     %> 
    } 
} 

마지막으로 이미지는 저장되지 않습니다.

+0

더 이상 'BASE64Decoder'를 사용하면 안됩니다. Java8부터는이를 처리하기위한 ['java.util.Base64'] (http://docs.oracle.com/javase/8/docs/api/java/util/Base64.html) 클래스가 있습니다. 그냥'decoder.decodeBuffer (st)'를 ['Base64.getDecoder() .decode (st)'] (http://docs.oracle.com/javase/8/docs/api/java/util/Base64)로 대체하십시오. Decoder.html # decode-java.lang.String-) – msrd0

답변

1

저는 JSP와 JavaScript의 차이점을 얻지 못했을 것이라고 생각합니다. 브라우저가 웹 페이지를 요구할 때 JSP가 서버에서 실행되는 동안 JavaScript는 클라이언트 측에서 실행되므로 브라우저에서 상호 작용을 수행하면 JavaScript가 실행됩니다.

String st = "document.writeln(dat)"; 

BufferedImage image = null; 
byte[] imageByte; 

BASE64Decoder decoder = new BASE64Decoder(); 
imageByte = decoder.decodeBuffer(st); 
ByteArrayInputStream bis = new ByteArrayInputStream(imageByte); 
image = ImageIO.read(bis); 
bis.close(); 

if (image != null) 
    ImageIO.write(image, "jpg", new File("d://1.jpg")); 
out.println("value=" + st); 
System.out.println("value=" + st); 

당신이 볼 수 있듯이, 아무 변화 st의 값이 없습니다 :

당신의 서버 (예를 들어, 아파치 톰캣) 먼저 당신의 JSP 코드를 실행합니다. 브라우저 이후

value=document.writeln(dat); 

자바 스크립트, 그는 그것을 실행하고 Base64로 인코딩 된 이미지를 표시합니다 실행 한 -하지만 서버는하지 않습니다 : 귀하의 broser는 서버에서 다음 코드를 받게됩니다.

정확한 차이는 this 문서를 참조하십시오. 이미지를 저장 saveImage.jsp라는 JSP 페이지를 가질 수 있습니다, 지금

function(data_uri) 
{ 
    // redirect 
    document.location.href = 'saveImage.jsp?img='+data_uri; 
} 

, 그리고 웹 페이지를 반환


이 코드 작업을하려면 가장 쉬운 방법은 페이지를 리디렉션하는 것입니다 이미 가지고있어, dara_uri를 요소 results에 기입 해주세요.

AJAX를 사용하는 것이 더 어렵지만 다른 방법이 있습니다. Here에 대한 소개입니다.

+0

document.href = 'saveImage.jsp? img ='+ data_uri; 그것은 작동하지 않습니다. in saveImage.jsp 위의 java 코드를 작성하여 img를 저장합니다. – user3201607

+0

@ user3201607 죄송합니다. 해당 'document.location.href' – msrd0

+0

동의 함. 이 질문에 대한 일반적인 대답은 우선 OP가이 예제 (Java Server Page)와 'JavaScript'또는 완전히 다른 프로그래밍 언어 인 ECMA의 차이점을 이해하는 데 도움이되어야합니다. 일반적으로 웹 브라우저 실행과 관련이 있습니다 (독점적으로 Google V8 엔진의 변형에서 사용되는 것은 아니지만). 이 후, 하나를 사용하여 파일을 업로드하는 방법에 대한 세부 사항을 알 수 있습니다. 여기에 하나가 있습니다 : http://stackoverflow.com/questions/2422468/how-to-upload-files-to-server-using-jsp-servlet –

0

Java 코드에서 JavaScript 변수를 사용하려고합니다. Java 코드는 서버에서 실행되는 반면 Javascript 코드는 사용자 브라우저에서 실행됩니다. JavaScript 코드가 실행될 때까지는 Java 코드가 이미 실행되었습니다. 당신이하려는 것은 무엇이든, 당신은 순수한 자바 스크립트에서 그것을해야만한다. 아니면 당신의 자바 스크립트 코드가 그 일을했을 때 서버에 AJAX 호출을 보내야한다.

관련 문제