簡體   English   中英

無法在JSP中保存圖像

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM