无法在jsp中保存图像
我无法在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)
%>
}
}
最后,图像没有保存。
我认为你没有得到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是对它的介绍。
document.href ='saveImage.jsp?img ='+ data_uri;尽管它不工作。在saveImage.jsp我正在写上面的java代码来保存img。 – user3201607 2014-09-23 16:47:53
@ user3201607对不起,其'document.location.href' – msrd0 2014-09-23 16:49:31
同意。这个问题的一般答案首先必须帮助OP理解作为本例中的服务器端编程语言(Java Server Page)与'JavaScript'或ECMA(它是一种完全不同的编程语言)之间的区别,通常与网络浏览器执行相关(尽管不完全如谷歌V8引擎的变体)。之后,可以详细了解如何使用其中一个文件上传文件。这里是一个:http://*.com/questions/2422468/how-to-upload-files-to-server-using-jsp-servlet – 2014-09-23 16:55:25
您正在尝试在Java代码中使用JavaScript变量。 Java代码在您的服务器上运行,而Javascript代码在用户的浏览器中运行。在JavaScript代码执行时,您的Java代码已经被执行。无论你想要做什么,你都必须用纯JavaScript来做,或者在你的Javascript代码完成它的事情时发送一个AJAX调用到你的服务器。
请注意,您不能再使用'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