文件上传存至oracle,fileupload上传文件存储到oracle Blob字段中

从网上查了许多资料,攒了个功能,暂且记下来,呵呵。需要apache的fileupload组件和io组件。

// 建立一个新的Upload对象

DiskFileUpload upload = new DiskFileUpload();

upload.setSizeThreshold(1024 * 300); //设置缓冲区大小

String rootPath = getServletConfig().getServletContext().getRealPath("/");

upload.setRepositoryPath(rootPath+"//uploads");//设置缓冲区目录upload.setSizeMax(10*1024*1024); //限制最大文件为10MB FileItem item = null;Connection conn = null; ResultSet rst = null;PreparedStatement pstmt = null;OutputStream output = null;BufferedInputStream bi = null;try{   List items = upload.parseRequest(request);    Iterator iter = items.iterator(); while(iter.hasNext()){        item = (FileItem) iter.next();               if (!item.isFormField()){//(不是表单域)是文件对象   bi = new BufferedInputStream(item.getInputStream());      byte[] buffer = new byte[1024];              conn = JdbcUtilsHelper.getConnection();   conn.setAutoCommit(false);   //先清空原来的上传文件   pstmt = conn.prepareStatement("update table set col=EMPTY_BLOB() where id=?");       pstmt.setString(1, xh);   pstmt.execute();       pstmt.close();      pstmt = conn.prepareStatement("select col from table  where id=? for update");   pstmt.setString(1, xh);   rst = pstmt.executeQuery();   if(rst.next()){    System.out.println("next");    oracle.sql.BLOB blob = (oracle.sql.BLOB)rst.getBlob(1);         output = blob.setBinaryStream(0);    int readNum = -1;    while( (readNum = bi.read(buffer)) != -1){ //通过Oracle驱动使用流方式读写     output.write(buffer,0,readNum);    }    //BLOB字段输出流关闭,以及其他GC处理    bi.close();    output.flush();    output.close();    conn.commit();        rst.close();    item.delete();        }   conn.setAutoCommit(true);        }   }// end while rtnCode = "1";//保存成功}catch(FileUploadException e) {// 处理文件尺寸过大异常        if(e instanceof SizeLimitExceededException) {         rtnCode = "-2";//文件太大   }        e.printStackTrace();    }catch(Exception e){ rtnCode = "-1";//保存失败 e.printStackTrace();}finally{   if(rst != null){    try{         rst.close();  }catch(Exception e1){   e1.printStackTrace();  }   }   if(pstmt != null){    try{         pstmt.close();  }catch(Exception e1){   e1.printStackTrace();  }    }   if(conn != null){    conn.setAutoCommit(true);    try{       conn.close();  }catch(Exception e1){   e1.printStackTrace();  }            }   if(item != null){    item.delete();   }    }// end finally

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值