【问题标题】:How to retrieve images from database and place on JSP? [duplicate]如何从数据库中检索图像并将其放置在 JSP 上? [复制]
【发布时间】:2011-05-18 23:43:54
【问题描述】:

我有一个 JSP 页面,它应该从数据库中获取所有图像并且应该显示在一个表上。我的结果集对象“rs”指向图像。我的代码是这样的:

String query = "select image from stock";
rst = stmt.executeQuery(query);
while(rst.next())
<%
<td><img height="89" src=<%rst.getString(1)%></td>
%>
  }

我知道,getString 不适用于 BLOB 类型。我什至使用了getBinaryStream(),但没有成功。有什么想法吗?

【问题讨论】:

    标签: java jsp servlets jdbc


    【解决方案1】:

    只需将响应类型设置为“image/jpg”并使用 ResultSet 检索列

    下面写的demo代码---

         if(rs.next()){
           int len = imgLen.length();
           byte [] rb = new byte[len];
           InputStream readImg = rs1.getBinaryStream(1);
           int index=readImg.read(rb, 0, len);
           response.setContentType("image/jpg");
           response.getOutputStream().write(rb,0,len);
           response.getOutputStream().flush();
           }
    

    【讨论】:

      【解决方案2】:

      Here is complete example ,

      注意:此示例仅供参考,以了解方式,

      【讨论】:

        【解决方案3】:

        使用以下代码将 Blob 转换为 byte[]:

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buf = new byte[1024];
        InputStream in = blob.getBinaryStream();
        int n = 0;
        while ((n=in.read(buf))>=0)
        {
           baos.write(buf, 0, n);
        }
        in.close();
        byte[] bytes = baos.toByteArray(); 
        

        使用 Servlet 编写图像:

        if (bytes != null && bytes.length > 0) {
         response.setContentType("image/jpg");
         response.getOutputStream().write(bytes);
         response.getOutputStream().flush();
         response.getOutputStream().close();
        }
        

        在 jsp 中使用 servlet 请求 url 检索您的图像:

        <img src="imageDisplayProcess.do?pKey=imageId" width="117" height="160"
         onError="loadImage()" onAbort="loadImage()" />
        
        imageDisplayProcess.do?pKey=imageId //should be your image servlet URL
        

        【讨论】:

        • 不需要将 blob 转换为 byte[]。只需将getBinaryStream() 写入getOutputStream()
        【解决方案4】:
        1. 制作一个 servlet 并将其映射到,例如,/image/*
        2. 使用src="image/&lt;%= imageId %&gt;,其中imageId是数据库中每张图片的唯一ID
        3. 在 servlet getBinaryStream() 中并将其传输(例如使用IOUtils.copy(..))到response.getOutputStream()
        4. Content-Type 设置为image/jpegimage/png(或任何类型)

        【讨论】:

        • InputStream sImage;字节[] bytearray = 新字节[1048576];整数大小=0; sImage = rst.getBinaryStream(2); response.reset(); response.setContentType("图片/jpeg"); while((size=sImage.read(bytearray))!= -1 ){ response.getOutputStream().write(bytearray,0,size);
        • 像我这样写的,但是我得到“getOutputStream() 已经被调用了这个响应”异常。
        • @Hermanth - 通过编辑原始问题显示整个 servlet 代码。这里不可读。
        猜你喜欢
        • 1970-01-01
        • 2011-09-13
        • 1970-01-01
        • 2014-06-15
        • 1970-01-01
        • 2015-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多