如何在java derby数据库中存储图像并将其显示在html / jsp页面上?

时间:2016-02-20 14:57:20

标签: java html jsp derby

我创造了这个 HTML page to accept the data from admin of page and store it in the database

和  html上的this is how the fetched data will be displayed

以下是JSP中的检索代码。

如何在填写表单时直接将图像存储在数据库中,以及如何将图像与其他数据一起显示回html页面。

<%
Class.forName("org.apache.derby.jdbc.ClientDriver");
Connection con=DriverManager.getConnection("jdbc:derby://localhost:1527/SEM6 ","SEM6","SEM6");
Statement st=con.createStatement();
ResultSet rs=st.executeQuery("Select * from products");
%>   


<%     
    while(rs.next())
    {%>
        <div class="productblock">
            <div class="producttable">
            <table>
                <tr><a class="linkfill" href="products/<%= rs.getString("pid") %>.html"></a>
                <td colspan="2"><span class="red"><%= rs.getString("name") %></span></td>
                </tr>
                <tr>
        <td>ID:  <span class="red"><%= rs.getString("pid") %></span></td>
        <td rowspan="3"></td>
                </tr>
        <tr><td>Wattage: <span class="red"><%= rs.getString("watt") %></span></td></tr>
        <tr><td>Price: <span class="red"><%= rs.getString("price") %></span></td></tr>
        <tr><td colspan="2"><%= rs.getString("s_desc") %></td></tr> 
            </table>
            </div>
        </div>
        <%
    }%>

3 个答案:

答案 0 :(得分:1)

您需要将图像存储在二进制文件中。

This article描述了如何在表格中创建二进制高亮。

接收表单帖子的servlet / jsp会将发布的图像加载到二进制文件中。

您还需要编写另一个从数据库中读取图像的servlet。

在html页面中,您可以使用要传递blob ID的图像网址中的servlet来加载。

例如,图像的网址可以是:

<img src="/your-app-context/stream-image?id=blogID" >

或者您也可以使用搜索引擎友好的网址:

<img src="/your-app-context/stream-image/magicmoon-downlight" >

其中magicmoon-downlight是一个唯一的名称,用于标识带有blob的表行。

当然,stream-image是web.xml中配置的servlet路径。

servlet将从url或传递的参数中读取图像的ID,找到表中的行并将二进制文件的内容流回浏览器。

如果您想知道如何流式传输图像,this post包含一个很好的示例(它从文件系统中读取图像,但调整代码并不困难)。使用@Jama

建议的示例

请注意他是如何设置内容类型和图像大小的。如果您希望与所有浏览器和搜索引擎友好兼容,这一点很重要。

答案 1 :(得分:1)

我已经使用FileInputStream将图像文件存储在Database中。 这是我在additem.jsp文件中所做的。

try {
String imgpath=request.getParameter("file");
Integer item_id=Integer.parseInt(request.getParameter("item_id"));
Class.forName("org.apache.derby.jdbc.ClientDriver");
Connection con=DriverManager.getConnection("jdbc:derby://localhost:1527/SEM6","SEM6","SEM6");

PreparedStatement psmnt = null;
FileInputStream fis;
File image = new File(imgpath);
psmnt = con.prepareStatement("insert into products(image)"+"values(?)");
fis = new FileInputStream(image); 
psmnt.setString(1, item_name);
psmnt.setBinaryStream(2, (InputStream)fis, (int)(image.length()));
int flag= psmnt.executeUpdate();
if(flag>0)
    {
        %> <jsp:forward page="added.html"></jsp:forward> <%
    }
    else
    {
        out.print("Error");

    }
}

catch (Exception e){
    out.print(e);
}

但是如何从数据库中检索图像并将其显示在HTML页面上?

答案 2 :(得分:1)

要从数据库中检索图像并将其显示在HTML页面上,我创建了一个带有<img>标记的html文件

<img src="getImage.jsp?pid=1001">

然后我创建了以下getImage.jsp文件

<%@page import="java.io.*,java.util.*,java.sql.*;"%>


<%  
int pid =Integer.parseInt(request.getParameter("pid"));


try {

    Class.forName("org.apache.derby.jdbc.ClientDriver");

    Connection conn = DriverManager.getConnection("jdbc:derby://localhost:1527/SEM6","user","pwd");
    Statement stmt = (Statement) conn.createStatement();
ResultSet rs;
    rs = stmt.executeQuery("select image from products where pid ="+pid);

    if (rs.next()) {
        byte[] imgData = rs.getBytes("image");
        System.out.println(imgData);
        response.setContentType("image/jpg");

        OutputStream os = response.getOutputStream();
        os.write(imgData);
        os.flush();
        os.close();

    }


  } catch (SQLException ex) {
            ex.printStackTrace();
} 
%>

当调用getImage.jsp时,jsp将输出作为Image文件返回。这就结束了这个问题的目的。