数据库中存的是二进制的图片文件,我需要把它读出来,然后显示在freemarker的页面上,请问我该怎么取,并怎么显示呀?
网上搜了很多,但是不行!
我用的是freemarker+webwork+ibatis
------解决方案--------------------
把图片以二进制形式放在数据库中,取出时要将这个图片生成文件保存到一个目录下,那么从这个目录中链接显示,不是直接从数据库取出就直接显示在页面上的,
mstrBackName = result.getString( "randomname ");//后辍名
mstrfileName = result.getString( "markname ");//图片名
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);
}
%>
------解决方案--------------------
我想应该是先向浏览器输出网页的文本字节流,浏览器会分析网页文件,如果有图片的标签它会向服务器申请图片文件,你可以在服务器的web.xml配置对图片文件进行过滤,如果请求的是图片文件,就调用图片处理servlet,让这个servlet读取数据库中某个图片的数据库中的二进制字节流发回浏览器,注意要在发送前设置response的发送类型。文本的是text/html ,图片的好像是/jpg等
------解决方案--------------------
小菜的是正解,我也是这么做的
http://community.csdn.net/Expert/topic/5251/5251650.xml?temp=.2915155
------解决方案--------------------
可以参考一下我的Blog
http://www.blogcn.com/User4/jaqcy/blog/35874137.html
------解决方案--------------------
替你靠过来了
从数据库取出图像数据并通过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
{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
// TODO 自动生成方法存根
resp.setContentType( "image/png "[img]/images/wink.gif[/img];
BufferedImage image=null;
try
{
Class.forName( "com.mysql.jdbc.Driver "[img]/images/wink.gif[/img];
Connection conn=DriverManager.getConnection( "jdbc:mysql://localhost/sampledb ", "root ", "mysql "[img]/images/wink.gif[/img];
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery( "select image from customers "[img]/images/wink.gif[/img];
if(rs.next())
{
Blob blob=rs.getBlob(1);
InputStream is=blob.getBinaryStream();
image=ImageIO.read(is);