0

我试过这段代码使用blob显示来自MySQL数据库的图像...图像不可见。我用过这段代码。

请纠正这个错误

<head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <img src="WEB-INF/New folder/birthhappy birthday.jpeg"
         width="65" height="71" alt="birthhappy birthday"/>    
        <H1>Database Lookup</H1>
        <FORM ACTION="base.jsp" METHOD="POST">
            Please enter the ID of the publisher you want to find:
            <BR>
            <input type="text" name="imagename">
            <BR>
            <INPUT TYPE="SUBMIT" value="Submit">
        </FORM>


    </body>
</html>

base.jsp:

<%@page import="java.io.OutputStream"%>
<%@ page import="java.sql.*" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>

         <% 

        Class.forName("com.mysql.jdbc.Driver");
        Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/searchimg","root","");
         Statement stmt = con.createStatement();
          //String id = request.getParameter("id"); 
          String imagename=request.getParameter("imagename");

          ResultSet resultset =stmt.executeQuery("select * from friendupload where imagename = '" +imagename.trim()+ "' ") ; 

 while(resultset.next())
{




%>                                      

<table>
    <tr>
        <td> <%=resultset.getString(1)%>         </td>
        <td>   <%=resultset.getString(2) %> </td>
        <td>    <%=resultset.getString(3)%>  </td>
                <td>     
                    Blob getimg=rs.getBlob( 4);
      InputStream readImg = getimg.getBinaryStream();
      int size=readImg.available();
      OutputStream outf=new FileOutputStream("D:/profile/"+rs.getString(2)+rs.getString(3)+".jpeg");

      byte b[]= new byte[size];
            readImg.read(b);
            outf.write(b);
            outf.close();



        </td>

    </tr>
    </table>

<% }%>

        </form>

    </body>
</html>
4

3 回答 3

0

有时浏览器不允许您使用本地硬盘驱动器中的资源。

您最好编写一个 ImageServlet 来直接传递这些图像,而无需将它们写入文件。

注意:如果您使用分块流(默认)传送这些图像,请指定内容长度!否则浏览器将不知道响应何时结束。这会导致防病毒程序永无止境地分析这些图像。

顺便说一句:WEB-INF/New folder/birthhappybirthday.jpeg 无法访问,尝试使用 WEB-INF/classes/META-INF/resources/New folder/birthhappybirthday.jpeg

于 2013-02-07T14:00:04.827 回答
0

为您存储的图像提供正确的路径,因此在 blob 保存图像后,您应该使用图像标签加载它,只是给 blob 不会显示图像。

<%while(resultset.next())
{
%>                                      
<table>
<tr>
    <td> <%=resultset.getString(1)%>         </td>
    <td>   <%=resultset.getString(2) %> </td>
    <td>    <%=resultset.getString(3)%>  </td>
            <td>     
                Blob getimg=rs.getBlob( 4);
  InputStream readImg = getimg.getBinaryStream();
  int size=readImg.available();
  OutputStream outf=new FileOutputStream("D:/profile/"+rs.getString(2)+rs.getString(3)+".jpeg");

  byte b[]= new byte[size];
        readImg.read(b);
        outf.write(b);
        outf.close();

  <image src="<%=path%>" />

    </td>

</tr>
</table>

您是否检查过图像文件是否保存在您指定的位置。

于 2013-02-07T06:49:15.483 回答
0

您的<form>标签丢失,并确保 d:\profile/ 目录<img>在表单元素中存在使用元素

于 2013-02-07T06:51:16.050 回答