2014-09-23 49 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)类来处理这个问题。只需用''Base64.getDecoder().decode(st)']替换'decoder.decodeBuffer(st)'](http://docs.oracle.com/javase/8/docs/api/java/util/Base64。 Decoder.html#decode-java.lang.String-) – msrd0 2014-09-23 16:35:41

回答

1

我认为你没有得到JSP和JavaScript之间的区别。在浏览器需要网页时,在服务器上执行JSP时,JavaScript将在客户端执行,因此在浏览器中,当您执行导致JavaScript运行的交互时。

你服务器(例如Apache Tomcat上)将首先执行你的JSP代码:

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改变的值。你broser会从你的服务器接收下面的代码片段:

value=document.writeln(dat); 

由于您的浏览器执行JavaScript的,他会执行它,并显示Base64编码的图像的一个 - 但您的服务器不会。

具体而言,请阅读this文章。


为了使代码工作,最简单的方法是将页面重定向:

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

现在,你可以有一个JSP页面称为saveImage.jsp是保存图像,并返回的网页你已经,并写入元素results dara_uri。

另一个,但更困难的方法是使用AJAX。 Here是对它的介绍。

+0

document.href ='saveImage.jsp?img ='+ data_uri;尽管它不工作。在saveImage.jsp我正在写上面的java代码来保存img。 – user3201607 2014-09-23 16:47:53

+0

@ user3201607对不起,其'document.location.href' – msrd0 2014-09-23 16:49:31

+0

同意。这个问题的一般答案首先必须帮助OP理解作为本例中的服务器端编程语言(Java Server Page)与'JavaScript'或ECMA(它是一种完全不同的编程语言)之间的区别,通常与网络浏览器执行相关(尽管不完全如谷歌V8引擎的变体)。之后,可以详细了解如何使用其中一个文件上传文件。这里是一个:http://stackoverflow.com/questions/2422468/how-to-upload-files-to-server-using-jsp-servlet – 2014-09-23 16:55:25

0

您正在尝试在Java代码中使用JavaScript变量。 Java代码在您的服务器上运行,而Javascript代码在用户的浏览器中运行。在JavaScript代码执行时,您的Java代码已经被执行。无论你想要做什么,你都必须用纯JavaScript来做,或者在你的Javascript代码完成它的事情时发送一个AJAX调用到你的服务器。