上传图片

前台:

     fieldLabel:"照片附件",
     width:400,
     name:"photo",
     inputType:"file",
     id:"photo"

注意:上传图片组件所在的form里必须加一个属性:fileUpload : true

 

后台:

     将图片直接存在Oracle数据库中的Blob对象中

 

  //保存图片
 public boolean savePhoto(String rid,File photo){  
  Connection conn=null;
  PreparedStatement pstmt=null;
  FileInputStream file=null;
  
  
  Statement stmt=null;
  ResultSet rs=null;
  InputStream in=null;
  FileOutputStream out=null;
  
  
  try {   
   //从hibernate那获得connection
   Session session = this.getSession();
   conn =session.connection();
   conn.setAutoCommit(false);
   
   pstmt=conn.prepareStatement("update t_a_resident_archives set photo=? where rid=?");
   file=new FileInputStream(photo);
   pstmt.setBlob(1, file);
   pstmt.setString(2, rid);
   pstmt.executeUpdate();
   conn.commit(); //到此,图片已成功保存,下面就是从数据库中取文件,用于判断是否真的保存成功了!
   
   //取数据库中的上传的图片

   stmt=conn.createStatement();
   String sql="select photo from t_a_resident_archives where rid=" + rid;
   rs=stmt.executeQuery(sql);
   byte[] buffer=new byte[1024];
   Blob blob=null;
   while(rs.next()){
    blob=rs.getBlob(1);
   }
   in=blob.getBinaryStream();
   //存放文件的路径
   out=new FileOutputStream("D:\\888.jpg");
   int number=in.read(buffer);
   //把读取的数据放到字节数组,并写到文件中
   while(number!=-1){
    out.write(buffer,0,number);
    number=in.read(buffer);
   }
   rs.close();
   stmt.close();
   in.close();
   out.close();


   
   file.close();
   pstmt.close();
   conn.close();
   return true;
  } catch (Exception e) {
   e.printStackTrace();
  }
  return false;
  
 }

 

(1)之前这样写后,虽然保存成功了,但IE浏览器总是出现下载文件的提示。

解决办法:

HttpServletResponse response = ServletActionContext.getResponse();

response.setContentType("text/html;charset=UTF-8"); //这句话很重要哦!

 (2)另外一个需要注意的问题:

        上面用到setBlob()这个方法,使用此方法,必须用到下面的配置才能支持此方法。

         jdk:1.6版本

         oracle的驱动包:ojdbc6.jar(此包支持jdk1.6的)

         oracle的数据库连接池包:commons-dbcp-1.4.jar

 (3)我的Hibernate配置文件夹里此字段用的type:java.sql.Blob,对应的bean里该字段也是Blob类型的。

        

OK!到此上传图片成功解决!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值