[英]unable save image in 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 =
'<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運行的交互時,就會執行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編碼的圖像-但是您的服務器不會。
為了准確的區別,請閱讀此文章。
為了使代碼正常工作,最簡單的方法是重定向頁面:
function(data_uri)
{
// redirect
document.location.href = 'saveImage.jsp?img='+data_uri;
}
現在,您可以擁有一個名為saveImage.jsp
的JSP頁面,用於保存圖像,並返回您已有的網頁,並將dara_uri寫入元素results
。
另一種但更困難的方法是使用AJAX。 這是它的介紹。
您正在嘗試在Java代碼中使用JavaScript變量。 Java代碼在您的服務器上運行,而Javascript代碼在用戶的瀏覽器中運行。 到JavaScript代碼執行時,您的Java代碼已被執行。 無論您要做什么,都必須使用純JavaScript來完成,或者在Javascript代碼完成后將AJAX調用發送到服務器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.