日期:2014-05-17  浏览次数:20775 次

求助:如何将图片以二进制流的形式存储到Oracle数据库中并可以浏览?急……,谢谢!
基于Structs1.2,有一个输入图片信息(包括浏览选择图片)的.jsp页面,想将浏览到的图片以二进制流的形式存储到Oracle数据库中。

------解决方案--------------------
文件上传 以路径存入就好了 用二进制的话要字段为blob的
------解决方案--------------------
上传的时候 ,将其转换为blob格式,存放进去就行了
------解决方案--------------------
我有个sqlserver的!!
不过 百度一下应该有例子的!!
------解决方案--------------------
可以参考验证码的图片生成原理

Java code

package com.banner.util.tools;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;




public class ImageAction extends HttpServlet { 

/** 
* 执行登陆的业务处理 
* @param request:发送上来的请求 
* @return destJsp:目标URL 
*/ 
    public void init() throws ServletException
    {
        super.init();
    }
    

    
    public void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException{
//设置页面不缓存 
response.setHeader("Pragma", "No-cache"); 
response.setHeader("Cache-Control", "no-cache"); 
response.setDateHeader("Expires", 0); 

//在内存中创建图象 
int width = 60, height = 20; 
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
//获取图形上下文 
Graphics g = image.getGraphics(); 
//生成随机类 
Random random = new Random(); 
//设定背景色 
g.setColor(getRandColor(220, 250)); 
g.fillRect(0, 0, width, height); 
//设定字体 
g.setFont(new Font("Times New Roman", Font.PLAIN, 18)); 
//画边框 
//g.drawRect(0,0,width-1,height-1); 
g.draw3DRect(0,0,width-1,height-1,true); 
//随机产生155条干扰线,使图象中的认证码不易被其它程序探测到 
g.setColor(getRandColor(160, 200)); 
for (int i = 0; i < 155; i++) { 
int x = random.nextInt(width); 
int y = random.nextInt(height); 
int xl = random.nextInt(12); 
int yl = random.nextInt(12); 
g.drawLine(x, y, x + xl, y + yl); 
} 
// 取随机产生的认证码(6位数字) 
String sRand = ""; 
String s = "012345678901234567890123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ012345678901234567890123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
for (int i = 0; i < 4; i++) { 
char rand =s.charAt(random.nextInt(s.length())); 
sRand += rand; 
// 将认证码显示到图象中 
g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110))); 
//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 
g.drawString(String.valueOf(rand), 13 * i + 6, 16); 
} 
g.drawOval(0,12,60,11); 
// 将认证码存入SESSION 
request.getSession().setAttribute("rand", sRand); 
// 图象生效 
g.dispose(); 
ServletOutputStream output = null; 
try { 
output = response.getOutputStream(); 
// 输出图象到页面 
ImageIO.write(image, "JPEG", output); 
} catch (IOException e) { 
e.printStackTrace(); 
}finally{
    output.close();
} 


} 

/** 
* 生成随机颜色 
*/ 
private Color getRandColor(int fc, int bc) { 
Random random = new Random(); 
if (fc > 255) 
fc = 255; 
if (bc > 255) 
bc = 255; 
int r = fc + random.nextInt(bc - fc); 
int g = fc + random.nextInt(bc - fc); 
int b = fc + random.nextInt(bc - fc); 
return new Color(r, g, b); 
} 


}

------解决方案--------------------
byte[] data = null;

try {

Statement stmt = conn.createStatement();

ResultSet myResultSet =