【问题标题】:How to store images in java derby database and display it on html/jsp page? [closed]如何将图像存储在 java derby 数据库中并将其显示在 html/jsp 页面上? [关闭]
【发布时间】:2016-06-02 04:24:45
【问题描述】:

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

并且 this is how the fetched data will be displayed 在 html 上。

下面是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>
        <%
    }%>

【问题讨论】:

    标签: java html jsp derby


    【解决方案1】:

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

    This article 描述了如何在您的表中创建二进制 lob。

    接收表单post的servlet/jsp会在二进制lob中加载posted image。

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

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

    例如,图片的 url 可以是:

    <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 建议的示例

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

    【讨论】:

    • 我已经创建了“产品”表,其中包含 BLOB 类型的“图像”列。但我不知道如何像上面的表格那样将它上传到数据库中,如何添加浏览图片按钮?或类似的东西,按下提交按钮后,它会将所有表单数据与图像一起存储在产品表中。
    • 您需要编写一个接受 multipart/form-data 的 servlet。如何做到这一点取决于您使用的 servlet 容器的版本。您可以从:stackoverflow.com/questions/2422468/…
    【解决方案2】:

    我使用 FileInputStream 将图像文件存储在数据库中。 这是我在 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 页面上?

    【讨论】:

      【解决方案3】:

      为了从数据库中检索图像并将其显示在 HTML 页面上,我创建了一个带有 &lt;img&gt; 标签的 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 将输出作为图像文件返回。这就是这个问题的目的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多