Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在jsp中保存图像_Java_Javascript_Jsp - Fatal编程技术网

Java 无法在jsp中保存图像

Java 无法在jsp中保存图像,java,javascript,jsp,Java,Javascript,Jsp,我无法在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 =

我无法在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)  
        %>
    }
}

函数save_photo()
{
网络摄像头.snap(函数(数据uri)
{
document.getElementById('results').innerHTML=
'这是您的图像:'+'';
var dat=数据_uri;
}
}

最后,图像不会被保存。

您正在尝试在Java代码中使用JavaScript变量。Java代码在您的服务器上运行,而JavaScript代码在用户的浏览器中运行。当JavaScript代码执行时,您的Java代码已经被执行。无论您尝试做什么,都必须使用纯JavaScript,或者发送AJAX cal当您的Javascript代码完成时,我会将它发送到服务器。

我认为您没有理解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
的值没有更改。您的浏览器将从您的服务器收到以下代码片段:

value=document.writeln(dat);
由于您的浏览器是执行JavaScript的浏览器,他将执行它并显示Base64编码的图像,但您的服务器不会

要了解确切的区别,请阅读文章


要使代码正常工作,最简单的方法是重定向页面:

function(data_uri)
{
    // redirect
    document.location.href = 'saveImage.jsp?img='+data_uri;
}
现在,您可以拥有一个名为
saveImage.JSP
的JSP页面,该页面保存图像,并返回您已经拥有的网页,并将dara_uri写入元素
results


另一种但更困难的方法是使用AJAX。这是对它的介绍。

请注意,您不能再使用
BASE64Decoder
。自Java8以来,有一个类来处理此问题。只需替换
decoder.decodeBuffer(st)
with document.href='saveImage.jsp?img='+data\u uri;即使它不工作。在saveImage.jsp中,我正在编写上面的java代码来保存img。@user3201607抱歉,它的
document.location.href
同意。这个问题的一般答案首先必须是帮助OP理解“java”作为服务器端程序的区别本例中的g语言(Java服务器页面)与“JavaScript”或ECMA相比,后者是一种完全不同的编程语言,通常与web浏览器的执行有关(尽管并非仅在Google的V8引擎变体中使用)。在此之后,您可以使用其中一种方法详细了解如何上载文件。下面是一种方法:抱歉,它重定向到savaimage.jsp页面,但其显示的空页面n图像也未保存。重定向后的url看起来是这样的…@user3201607您需要对其进行url编码(以便/变成%2F等等),否则您将无法看到正确的图像。我刚刚发布了一个示例,不关心类似的事情