java - 如何在jsp中获取img标签中的blob图像

标签 java html image jsp

我找不到从 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>

我尝试了很多问题,例如从 <img> 中的数据库检索 blob 文件但我不明白如何显示。所以请有人告诉我如何在 <img> 中获取 Blob 图像使用jsp动态标记。

我希望有人能帮助我......!

最佳答案

您可以尝试使用带有数据 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));

关于java - 如何在jsp中获取img标签中的blob图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28064920/

相关文章:

javascript - AJAX 将数据传递给 PHP

html - 带有 float 的元素失真 :left

image - Flutter:来自网络的 ImageCache 使应用程序崩溃 - 警告数据库已锁定 0:00:10.000000。确保您始终使用

javascript - HTML表单使用JavaScript从url图像上传文件

java - 正则表达式除了第一个

Java 与 Neo4j Cypher

css - 框出现在 Internet Explorer 中的文本区域下

java - 通用图像加载器,下载更高效,数据更少。如何?

java - 从音频文件计算 FFT

java - 如何设置该程序以匹配 MVC 设计模式