使用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); } } } );
爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情