VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 905|回复: 3

请问怎么把从数据库中取出的图片文件显示在页面上?

[复制链接]

2

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-3-20 13:00:01 | 显示全部楼层 |阅读模式
数据库中存的是二进制的图片文件,我需要把它读出来,然后显示在freemarker的页面上,请问我该怎么取,并怎么显示呀?

网上搜了很多,但是不行!

我用的是freemarker+webwork+ibatis
回复

使用道具 举报

0

主题

16

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-6-30 02:30:01 | 显示全部楼层
把图片以二进制形式放在数据库中,取出时要将这个图片生成文件保存到一个目录下,那么从这个目录中链接显示,不是直接从数据库取出就直接显示在页面上的,
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);
}
%>
回复

使用道具 举报

0

主题

11

帖子

9.00

积分

新手上路

Rank: 1

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

使用道具 举报

0

主题

11

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-7-13 22:00:01 | 显示全部楼层

替你靠过来了
从数据库取出图像数据并通过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);

}

rs.close();

stmt.close();

conn.close();

ServletOutputStream sos=resp.getOutputStream();

ImageIO.write(image,"PNG",sos);

sos.close();

}

catch (Exception e)

{

// TODO 自动生成 catch 块

e.printStackTrace();

}

}



@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException

{

// TODO 自动生成方法存根

doGet(req, resp);

}



@Override

public 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>


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表