使用jdbcTemplate 保存图片 至数据库 以及 从数据库读取 保存到本地

使用jdbcTemplate 保存图片 至数据库 以及 从数据库读取 保存到本地

注,以下代码来自我一同事(wangXD),个人觉得该大神写得非常不错,特经过该大神同意,分享给广大网友学习参考

此外,以下代码所操作的数据库为ORACLE

String picPath = "";    
//@author wxd  
    final Map map = new HashMap<String, Integer>();    
    if( uploadRequest.getSize("file") > 0 ){    
         String name = uploadRequest.getFileName("file");    
         final String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+"_"+name;    
         InputStream is = uploadRequest.getFileAsStream("file");    
         final  byte[] img = FileCopyUtils.copyToByteArray(is);    
        String sqlforInsert = "insert into TOOL_IM_FILE values (?,?,?)";    
        final   LobHandler  lobHandler = new DefaultLobHandler();    
        jdbcTemplate.execute(sqlforInsert, new AbstractLobCreatingPreparedStatementCallback(lobHandler) {    
            @Override    
            protected void setValues(PreparedStatement ps, LobCreator lobCreator)    
                    throws SQLException, DataAccessException {    
    
                String sqlforMaxId = "select max(id) id from TOOL_IM_FILE";    
                int maxid  = 0;    
                try {    
                    maxid   = jdbcTemplate.queryForObject(sqlforMaxId, Integer.class);    
                    maxid+=1;    
                } catch (Exception e) {    
                    maxid = 1;    
                }    
                    map.put("maxid", maxid);    
                    ps.setInt(1,maxid);    
                    ps.setString(2, fileName);    
                    lobCreator.setBlobAsBytes(ps, 3, img);    
            }    
        });    
     System.out.println(resourceRequest.getContextPath());    
     //2.读出来返回存到服务器,直接用is流,获取地址    
    String path = resourceRequest.getContextPath()+"/data/layimtemp/";    
    File pathFile = new File(path);    
    if(!pathFile.exists()){//判断路径是否存在    
        pathFile.mkdirs();    
    }     
    File file = new File(path+fileName);    
    if (!file.exists())    
    {     
        file.createNewFile(); // 如果文件不存在,则创建     
    }    
        
    //从数据库读取流刷到文件中    
    String sqlforimage = "select  FILES from TOOL_IM_FILE where  id =" + map.get("maxid");    
    final OutputStream os=new FileOutputStream(file);    
    jdbcTemplate.query(sqlforimage,  new AbstractLobStreamingResultSetExtractor() {    
    
        @Override    
        protected void handleNoRowFound() throws DataAccessException {    
        System.out.println("Not Found result!");    
        }    
    
        @Override    
        protected void streamData(ResultSet rs) throws SQLException,    
                IOException, DataAccessException {    
              InputStream is = lobHandler.getBlobAsBinaryStream(rs, 1);    
              if (is != null) {    
                    FileCopyUtils.copy(is, os);    
                  }    
        }    
    } );



如果您觉得本文章对您有用,也为了更好的运营博客,您可以点击这里捐助

评论 抢沙发

昵称 (必填) 邮箱 (必填)
表情