不经过临时文件,直接从BLOB字段,下载数据显示图片!

博客给出Java代码示例,包含创建图片的函数,以及在web.xml中配置servlet从Oracle数据库获取图片数据并输出的程序。还展示了两个jsp页面调用相关功能的代码,实现图片在页面的显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看下面的这个函数:
public void createImage(ServletRequest req, ServletResponse res,Chart chart)throws IOException
{

res.setContentType("image/jpeg");    
ChartUtilities.writeChartAsJPEG(res.getOutputStream(),
100,chart.getChart(),chart.getWidth(),chart.getHeight(),null);
}

用第一钟,比较好
下面是程序,你只要在web.xml中配个servlet就可以了。
import java.sql.*;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class DownLoad extends HttpServlet{
    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        doPost(request,response);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        System.out.println("======DownLoad begin=====");
        try{
            Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@10.216.0.2:1521:ORCL","test","test");
            Statement stmt=conn.createStatement();
            String id=request.getParameter("id");
            String sql="SELECT id, name, content FROM test where id='"+id+"'";
            ResultSet rs=stmt.executeQuery(sql);
            if(rs.next()){
                Blob blob = rs.getBlob("content");
                byte[] ab = blob.getBytes(1, (int)blob.length());
                response.setContentType("image/jpeg");
                ServletOutputStream op = response.getOutputStream();
                op.write(ab);
                op.flush();
                op.close();
            }
        }catch(Exception ex){
            ex.printStackTrace();
        }
        System.out.println("======DownLoad end=====");
    }
}
以下是调用,其中tempChart是你生成的chart对象
<%
new com.chart.CreateChartImage().createImage(request,response,tempChart);

%>



--------两个jsp---------------

--------------------主-----------------------
<table width="100%" >
<tr>
<td align="center"><img  src="item_pic.jsp?ITEM_ID=<%=item_id%>&PIC_NUM=<%=pic_num%>">
</td>
</tr>
</table>
----------------------------------------item_pic.jsp--------------------------------------<%@ page import="java.sql.*" %>
<%@ page import="java.io.*" %>
<%  
     Connection conn = null;
 Statement stmt=null;
 ResultSet set=null;
     try{
String item_id=request.getParameter("ITEM_ID");
String pic_num=request.getParameter("PIC_NUM");
String sql="select PIC from ITEM_PIC WHERE ITEM_ID ="+item_id+" and  PIC_NUM = "+pic_num;
   conn =getConnection();
        stmt = conn.createStatement(); 
set = stmt.executeQuery(sql);
if(set.next()){
InputStream in = set.getBinaryStream("PIC");
response.reset();
response.setContentType("image/jpeg");
byte[] b = new byte[1024];
int len;
while((len=in.read(b))!=-1){
response.getOutputStream().write(b);
}
in.close();
}
 }catch(Exception e){
 }finally{
try{
if(set!=null)
set.close();
}catch(java.sql.SQLException se){
}
try{
if(stmt!=null)
stmt.close();
}catch(java.sql.SQLException se){
}
   try{
   if(conn != null )
conn.close();
   }catch(java.sql.SQLException se){
   }
}
%>

转载于:https://www.cnblogs.com/xnxqs/archive/2005/08/16/216237.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值