如何编码servlet对base64的响应?

时间:2015-09-26 08:58:43

标签: java ajax servlets encoding base64

我试图将servlet中的图像发送到ajax调用,但它在我的浏览器中显示了一些字符。 我的问题是如何在base64中编码servlet响应。 我有一个图像作为回应。

Servlet代码:

response.setContentType("image/jpeg");
ServletOutputStream out;  
out = response.getOutputStream();
FileInputStream fin = new FileInputStream("D:\\Astro\\html5up-arcana (1)\\images\\1.jpg");

BufferedInputStream bin = new BufferedInputStream(fin);  
BufferedOutputStream bout = new BufferedOutputStream(out);  
int ch =0; ;  
while((ch=bin.read())!=-1) {  
    bout.write(ch);  
}  

Ajax代码:

$(document).ready(function() {
    $('#nxt').click(function() {
        $.ajax({
            url : 'DisplayImage',
            data : {
                userName : 'Hi'
            },
            success : function(result) {
                $('#gallery-overlay').html('<img src="data:image/jpeg;base64,'+result+'"/>');
            }
        });
    });
});

1 个答案:

答案 0 :(得分:-1)

  • 使用java.util.Base64 JDK8

    byte[] contents = new byte[1024];
    int bytesRead = 0;
    String strFileContents;
    while ((bytesRead = bin.read(contents)) != -1) {
        bout.write(java.util.Base64.getEncoder().encode(contents), bytesRead);
    }
    
  • 使用sun.misc.BASE64Encoder请注意:Oracle表示sun.*软件包不属于受支持的公共接口。因此,请尝试阻止使用此方法

    sun.misc.BASE64Encoder encoder= new sun.misc.BASE64Encoder();
    byte[] contents = new byte[1024];
    int bytesRead = 0;
    String strFileContents;
    while ((bytesRead = bin.read(contents)) != -1) {
        bout.write(encoder.encode(contents).getBytes());
    }
    
  • 使用org.apache.commons.codec.binary.Base64

    byte[] contents = new byte[1024];
    int bytesRead = 0;
    while ((bytesRead = bin.read(contents)) != -1) {
        bout.write(org.apache.commons.codec.binary.Base64.encodeBase64(contents), bytesRead);
    }