gpt4 book ai didi

java - jsp中无法保存图片

转载 作者:行者123 更新时间:2023-12-03 11:47:17 25 4
gpt4 key购买 nike

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

最后,图像没有保存。

最佳答案

我认为您没有理解 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 编码的图像 - 但您的服务器不会。

要了解确切的差异,请阅读 this文章。

<小时/>

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

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

现在,您可以有一个名为 saveImage.jsp 的 JSP 页面,用于保存图像,并返回已有的网页,并将 dara_uri 写入元素 results.

另一种更困难的方法是使用 AJAX。 Here是对其的介绍。

关于java - jsp中无法保存图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25999718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com