我无法在JSP中保存数据URI。我这样想,下面的代码有什么错误吗?
<%@ 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 :(得分: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;
}
现在,您可以拥有一个名为saveImage.jsp
的JSP页面来保存图像,并返回您已经拥有的网页,并将dara_uri写入元素results
。
另一种但更困难的方法是使用AJAX。 Here是对它的介绍。
答案 1 :(得分:0)
您正尝试在Java代码中使用JavaScript变量。 Java代码在您的服务器上运行,而Javascript代码在用户的浏览器中运行。到JavaScript代码执行时,您的Java代码已经执行。无论你想做什么,都必须在纯JavaScript中完成,或者在你的Javascript代码完成之后向你的服务器发送一个AJAX调用。