2010-08-26 36 views
2

我有一個正在生成圖像的Java Applet。最終,我想將圖像數據插入到數據庫中,因此我想暫時將圖像數據存儲在包含小程序的頁面上的表單字段中。我希望能夠在客戶機上不存儲圖像文件的情況下做到這一點。如何將圖像從Java Applet發送到JavaScript?

這一切都來自簽名墊。下面是一些代碼是應該產生從存儲在所述對象sigObj矢量數據的位馬培德圖像:

sigObj.setImagePenWidth(10); 
sigObj.setImageXSize(1000); 
sigObj.setImageYSize(350); 
image = sigObj.sigImage(); 

圖像變量是一個BufferedImage對象。另外,這裏是警報輸出,如果我只是發送圖像變回我的JavaScript:

[email protected]: type = 5 
ColorModel: # 
pixelBits = 24 
numComponents = 3 
color space = [email protected] 
transparency = 1 
has alpha = false 
isAlphaPre = false 
ByteInterleavedRaster: width = 1000 height = 350 # 
numDataElements 3 
dataOff[0] = 2 

(增加了可讀性換行符)

是否有可能圖像本身發回?有什麼建議麼?

我不太瞭解Java,所以我很抱歉如果我問一個愚蠢的問題。

謝謝。

編輯:

按照從BalusC的建議,這裏是我用來將圖像轉換爲Base64字符串任何人誰可能會好奇代碼:(IMG是一個BufferedImage,dataImg是一個String )

import org.apache.commons.codec.binary.Base64; 

... 

try{   
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    ImageIO.write(img, "BMP", baos); 
    byte[] bytes = baos.toByteArray(); 
    dataImg = new Base64().encodeBase64String(bytes); 
} catch(Exception e) {} 

這使用Apache Commons Codec來執行Base64編碼。也許這是微不足道的,但這對我來說是新的。

回答

2

你已經基本上2種選擇:

  1. 編碼從byte[]使用StringBase64這樣,當被轉移爲字符數據的二進制數據將不會畸形。然後,讓JavaScript將其設置爲某些POST表單的某些隱藏輸入值。在服務器端,你需要Base64解碼它以獲取原始字節數組。

  2. 使用Java在Applet中以編程方式觸發HTTP POST請求。 Java SE API爲此提供了java.net.URLConnectionlittle tutorial here)。更方便的API是Httpclient。在服務器端,您只需將其作爲常規POST請求參數處理即可。

目前還不清楚你使用的服務器端編程語言,所以我不能給出更詳細的答案。

+0

感謝您的建議,編碼爲Base64字符串解決了我的問題。然後我可以使用base64_decode在PHP中解碼它以恢復我的圖像。 – rjc 2010-08-27 14:54:03

+0

不客氣。 – BalusC 2010-08-27 15:00:13

+0

我有同樣的問題。第二個選項是不可能的,因爲HttpOnly在我們的系統中設置爲true,這使得Applets無法與服務器通信。 – Satish 2014-06-03 13:51:04

相關問題