jsp通过从数据库读取的字节流(byte[])制作图片

本文介绍如何将文件转化为字节流存入数据库,并从数据库中读取字节流转换回图片。主要涉及数据库操作和字节流处理技术。

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

1、怎样将文件以字节流(byte[])存入数据库,在数据库中存放字节流的类型为image

如:

         
PreparedStatement ps = CatenateDB.prepare(conn, sql);
       String F = src+"\\"+f; //文件路径(包含文件名)
       try {
          InputStream is = new FileInputStream(F);
          ps.setBinaryStream(1, is, is.available());
          int count = ps.executeUpdate();
          if(count>0){
                i=1;
            }else{
                i=-1;
            }
       } catch (Exception e) {
          e.printStackTrace();
       }

注意:下面方法的conn为连接数据库的类对象,sql是将更新上图所示的表格的head字段

2、怎样将数据库中存放的字节流转换成图片

页面上读取从数据库读取的字节流生成的图片的方法:
 <img src="index/makeImage.jsp?id=124"></img>
makeImage.jsp源码:
<%@ page contentType="image/jpeg" pageEncoding="gbk"%>
<%@ page import="com.other.MakeImage" %>
<%
   try{
      int id = Integer.parseInt(request.getParameter("id")); //用户userid
      new MakeImage(id,response.getOutputStream());
   }catch(Exception e){
     
   }
   out.clear();
   out = pageContext.pushBody();
%>

com.other.MakeImage.java源码:

/**
 * @System: Online CV System
 * @Version:1.0
 * Copyright @ 2011 by GuangDongOceanUniversity
 * Class:
 * Sumarry:从数据库读取二进制字节流(byte[])到页面中生成图片
 * Create: 2011.12.31
 * Update:
 */
package com.other;

import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import com.microbolg.DaoMicrobolg;

public class MakeImage{

    /* 方法:  MakeImage
    * 描述:  从数据库读取二进制字节流(byte[])到页面中生成图片
    * 输入:  int userid 用户ID , OutputStream os 从数据库读取的图片二进制字节流
    * 返回: 
    * 异常处理:
    */
   public MakeImage(int userid,OutputStream os)throws IOException{
       DaoMicrobolg dao = new DaoMicrobolg();
       ArrayList<Object> array = dao.searchImage(userid);
       os.write((byte[])array.get(0), 0, ((byte[])array.get(0)).length); 
        os.flush(); 
        os.close();     
   }
   
}

com.microbolg.DaoMicrobolg类中的searchImage方法:

public ArrayList<Object> searchImage(int userid) { //通过微博信息表的userid获取用户头像字节流
       Connection conn = CatenateDB.createConn();
       String sql = "select head from user_message where userid=?";
       PreparedStatement ps = CatenateDB.prepare(conn, sql);
       ArrayList<Object> array = new ArrayList<Object>();
       try {
          ps.setInt(1,userid);
          ResultSet rs = ps.executeQuery();
          while(rs.next()){
                 array.add(rs.getBytes(1));
          }
       } catch (SQLException e) {
          e.printStackTrace();
       }
       CatenateDB.close(ps);
       CatenateDB.close(conn);
       return array;
   }

CatenateDB.java:

package com.util.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class CatenateDB {
	public static Connection createConn() {
		Connection conn = null;
		try {
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=microbolg", "sa", "");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	public static PreparedStatement prepare(Connection conn, String sql) {
		PreparedStatement ps = null;
		try {
			ps = conn.prepareStatement(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return ps;
	}
	
	public static void close(Connection conn) {
		
		try {
			conn.close();
			conn = null;
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public static void close(Statement stmt) {
		try {
			stmt.close();
			stmt = null;
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public static void close(ResultSet rs) {
		try {
			rs.close();
			rs = null;
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}


 



 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值