【问题标题】:how to get blob images in img tag in jsp如何在jsp中获取img标签中的blob图像
【发布时间】:2015-03-19 20:05:00
【问题描述】:

我找不到从 Db 获取 blob 图像并使用 jsp 显示在 img 标签中的解决方案。我尝试如下代码,

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page import="java.sql.*" %>
    <%@ page import="java.io.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border=1>
<%
try
{
Class.forName("com.mysql.jdbc.Driver");
Connection connection =DriverManager.getConnection("jdbc:mysql://localhost:3306/raptor1_5","root","");
Statement st=connection.createStatement();
ResultSet rst = st.executeQuery("select * from contacts");
while(rst.next())
{
    Blob image = rst.getBlob("Images");
    byte[ ] imgData = null ; 
    imgData = image.getBytes(1,(int)image.length());
    String answer = rst.getString("Answers");
    //response.setContentType("image/gif");

    //OutputStream o = response.getOutputStream();


%>
    <tr>
    <td><img src="<%=imgData %>" alt="images Here" width="130px" height="90px"></td>
    <td><%=answer %></td>
    </tr>
<%} 
}
catch(Exception e)
{
    e.printStackTrace();
}



%>
</table>
</body>
</html>

我尝试了很多问题,例如从&lt;img&gt; 中的 DB 中检索 blob 文件,但我不明白如何显示。所以请有人告诉我如何使用 jsp 动态获取 &lt;img&gt; 标记中的 blob 图像。

希望有人能帮帮我..!

【问题讨论】:

    标签: java html image jsp


    【解决方案1】:

    您可以尝试使用带有数据 url 的内联图像,更多信息在这里:http://www.websiteoptimization.com/speed/tweak/inline-images/

    这会将数据编码为base64。

    String imgDataBase64=new String(Base64.getEncoder().encode(imgData));
    

    这是为了在网页中显示图像

    <img src="data:image/gif;base64,<%= imgDataBase64 %>" alt="images Here" width="130px" height="90px"/>
    

    如果你对base64有问题,你可以从https://gist.github.com/EmilHernvall/953733使用这个函数

    public static String encode(byte[] data)
        {
            char[] tbl = {
                'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
                'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
                'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
                'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/' };
    
            StringBuilder buffer = new StringBuilder();
            int pad = 0;
            for (int i = 0; i < data.length; i += 3) {
    
                int b = ((data[i] & 0xFF) << 16) & 0xFFFFFF;
                if (i + 1 < data.length) {
                    b |= (data[i+1] & 0xFF) << 8;
                } else {
                    pad++;
                }
                if (i + 2 < data.length) {
                    b |= (data[i+2] & 0xFF);
                } else {
                    pad++;
                }
    
                for (int j = 0; j < 4 - pad; j++) {
                    int c = (b & 0xFC0000) >> 18;
                    buffer.append(tbl[c]);
                    b <<= 6;
                }
            }
            for (int j = 0; j < pad; j++) {
                buffer.append("=");
            }
    
            return buffer.toString();
        }
    

    要使用它,只需

    String imgDataBase64=encode(imgData));
    

    【讨论】:

    • 如果我使用 "/> 它会显示在此行找到多个注释:- 语法错误,插入“)”完成Expression - 语法错误,插入“AssignmentOperator Expression”完成Assignment - 语法错误,插入“)”完成MethodInvocation - 语法错误,插入“)”完成MethodInvocation。
    • 即使我尝试了 "/> 但没有显示..!?
    • 导入 base64 的命名空间是什么?
    • 它显示为无法解析导入 java.util.Base64。我要添加任何 jar 吗?
    • 你几乎解决了所以告诉我解决方案解决导入 java.util.Base64 无法解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 2013-03-27
    • 2011-03-26
    • 2018-06-23
    相关资源
    最近更新 更多