数据库中存的是二进制的图片文件,我需要把它读出来,然后显示在freeer的页面上,请问我该怎么取,并怎么显示呀?网上搜了很多,但是不行!我用的是freeer+webwork+ibatis

解决方案 »

  1.   

    把图片以二进制形式放在数据库中,取出时要将这个图片生成文件保存到一个目录下,那么从这个目录中链接显示,不是直接从数据库取出就直接显示在页面上的,
    mstrBackName = result.getString("randomname");//后辍名
    mstrfileName = result.getString("name");//图片名
    pintid = result.getInt("id");
    InputStream inStream=result.getBinaryStream("MarkBody");//数据库中取出的二进制流
    String aa=getServletContext().getRealPath("/")+"upload/showFile/";     
    FileOutputStream fs=new FileOutputStream(aa+mstrBackName);//定义要操作的路径和图片名
    if(mstrBackName!=null&&mstrBackName!="")
    {
    byte[]  buffer =new  byte[1444];
    while ((byteread=inStream.read(buffer))!=-1) 
    {
    bytesum += byteread;
    fs.write(buffer,0,byteread);//写图片文件
    }
    String str;
    str = "<img src='showFile/"+mstrBackName+"'"; //显示出图片
    str = str + "width=39 height=42 border=0>";
    out.println(str);
    out.println(pintid);
    }
    %>
      

  2.   

    我想应该是先向浏览器输出网页的文本字节流,浏览器会分析网页文件,如果有图片的标签它会向服务器申请图片文件,你可以在服务器的web.xml配置对图片文件进行过滤,如果请求的是图片文件,就调用图片处理servlet,让这个servlet读取数据库中某个图片的数据库中的二进制字节流发回浏览器,注意要在发送前设置response的发送类型。文本的是text/html ,图片的好像是/jpg等
      

  3.   

    小菜的是正解,我也是这么做的
    http://community.csdn.net/Expert/topic/5251/5251650.xml?temp=.2915155
      

  4.   

    可以参考一下我的Blog
    http://www.blogcn.com/User4/jaqcy/blog/35874137.html
      

  5.   


    替你靠过来了
    从数据库取出图像数据并通过servlet发布为图片代码只能做为参考,最好不要用在实际,因为它严重违反了MVC模式。
        servlet        
    以下内容为程序代码:
    /** *  */package servlet;import java.io.*;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.ServletConfig;import javax.servlet.ServletOutputStream;import javax.imageio.ImageIO;import java.sql.*;import java.awt.Image;import java.awt.image.BufferedImage;/** * @author jaqcy * */public class ImageServlet extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{// TODO 自动生成方法存根resp.setContentType("image/png";BufferedImage image=null;try{Class.forName("com.mysql.jdbc.Driver";Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/sampledb","root","mysql";Statement stmt=conn.createStatement();ResultSet rs=stmt.executeQuery("select image from customers";if(rs.next()){Blob blob=rs.getBlob(1);InputStream is=blob.getBinaryStream();image=ImageIO.read(is);}rs.close();stmt.close();conn.close();ServletOutputStream sos=resp.getOutputStream();ImageIO.write(image,"PNG",sos);sos.close();} catch (Exception e){// TODO 自动生成 catch 块e.printStackTrace();}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{// TODO 自动生成方法存根doGet(req, resp);}@Overridepublic void init(ServletConfig config) throws ServletException{// TODO 自动生成方法存根super.init(config);}}        
    以下内容为程序代码:
    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><servlet><servlet-name>image</servlet-name><servlet-class>servlet.ImageServlet</servlet-class></servlet><servlet-mapping><servlet-name>image</servlet-name><url-pattern>/image.png</url-pattern></servlet-mapping><welcome-file-list><welcome-file>image.png</welcome-file></welcome-file-list></web-app>
      

  6.   

    不是吧zwgaa照抄我的代码有35分,我自己只得10分.-_-
      

  7.   

    哈哈,谢谢楼上的blog,下回我有问题把分还给你