前端对应的js:
$("#export").click(function() { var start = $("#start").val(); var end = $("#end").val(); var type = $("#e1").val(); var appkey = $("#e2").val(); var phoneType = $("#e4").val(); var area = $("#e6").val(); var url = $context.ctx + "/queryHbase/phone_query_total_export?start="+start+"&end="+end+"&type="+type+"&appkey="+appkey+"&phoneType="+phoneType+"&area="+area+"&reqType=total"; window.location.href = url; });
后端的Dao层:
@Override public void queryHbaseDataByCondition(HttpServletRequest request, HttpServletResponse response) throws Exception { String rootPath = request.getRealPath("/"); QueryHbaseParaDTO queryHbaseParaDTO = new QueryHbaseParaDTO(); queryHbaseParaDTO.setStartKey("1509437597618"); queryHbaseParaDTO.setEndtKey("1510293754089"); queryHbaseParaDTO.setTableName(tableName); //获得Hbase对应的对象的集合 List<Object> stringList = getRowkeyListByFilterNew(queryHbaseParaDTO, SpiderCaptchaResultDTO.class); String name = "图片压缩包下载"; String fileName = name + System.currentTimeMillis(); String zipFileName = fileName + ".zip"; File zipFile = null; String path = rootPath + "temp_download"; FileOutputStream zipFos = null; //调用工具类获取图片 byte[] data = new byte[0]; FileOutputStream outStream = null; try { //创建文件 File file = new File(rootPath + "temp_download"); //判断文件是否存在,如果不存在,则创建此文件夹 if (!file.exists()) { file.mkdir(); } BASE64Decoder decoder = new BASE64Decoder(); byte[] b = decoder.decodeBuffer(((SpiderCaptchaResultDTO) stringList.get(0)).getCaptcha()); for(int i=0;i<b.length;++i) { if(b[i]<0) {//调整异常数据 b[i]+=256; } } data = b; //new一个文件对象用来保存图片,默认保存当前工程根目录 if (data != null) { File imageFile = new File(path + File.separator + fileName + ".jpg"); //创建输出流 outStream = new FileOutputStream(imageFile); //写入数据 outStream.write(data); //关闭输出流 outStream.close(); } } catch (IOException e) { e.printStackTrace(); } finally { outStream.close(); } try { //获取创建好的图片文件 File imageFile = new File(path + "/" + fileName + ".jpg"); // 打成压缩包 zipFile = new File(path + "/" + zipFileName); zipFos = new FileOutputStream(zipFile); ArchiveOutputStream archOut = new ArchiveStreamFactory().createArchiveOutputStream(ArchiveStreamFactory.ZIP, zipFos); if (archOut instanceof ZipArchiveOutputStream) { ZipArchiveOutputStream zos = (ZipArchiveOutputStream) archOut; ZipArchiveEntry zipEntry = new ZipArchiveEntry(imageFile, imageFile.getName()); zos.putArchiveEntry(zipEntry); zos.write(FileUtils.readFileToByteArray(imageFile)); zos.closeArchiveEntry(); zos.flush(); zos.close(); } // 压缩完删除txt文件 if (imageFile.exists()) { imageFile.delete(); } // 输出到客户端 OutputStream out = null; out = response.getOutputStream(); response.reset(); response.setHeader("Content-Disposition", "attachment;filename=" + new String(zipFileName.getBytes("GB2312"), "ISO-8859-1")); response.setContentType("application/octet-stream; charset=utf-8"); response.setCharacterEncoding("UTF-8"); out.write(FileUtils.readFileToByteArray(zipFile)); out.flush(); out.close(); // 输出客户端结束后,删除压缩包 if (zipFile.exists()) { zipFile.delete(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ArchiveException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { zipFos.close(); } }Hbase条件查询:
public static List<Object> getRowkeyListByFilterNew( QueryHbaseParaDTO queryHbaseParaDTO,final Class<?> clazz) { Object obj = null; FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL); SingleColumnValueFilter filter=new SingleColumnValueFilter("info".getBytes(),"supplier".getBytes(), CompareFilter.CompareOp.EQUAL,"DM2".getBytes()); filter.setFilterIfMissing(true); filterList.addFilter(filter); if ((filterList == null || filterList.getFilters().size() <= 0)&&queryHbaseParaDTO!=null) { return null; } List<Object> list = new ArrayList<Object>(); List<SpiderCaptchaResultDTO> listSpider = new ArrayList<SpiderCaptchaResultDTO>(); Scan scan = new Scan(); scan.setStartRow(Bytes.toBytes(queryHbaseParaDTO.getStartKey())); scan.setStopRow(Bytes.toBytes(queryHbaseParaDTO.getEndtKey())); scan.setFilter(filterList); Connection conn = null; HTable table = null; try { conn = getConnection(); obj = clazz.newInstance(); table = (HTable) conn.getTable(TableName.valueOf(queryHbaseParaDTO.getTableName())); ResultScanner rs = table.getScanner(scan); Field[] fields=clazz.getDeclaredFields(); for (Result r : rs) { for (Field field : fields) { HbaseClassField annotion = field.getAnnotation(HbaseClassField.class); if (annotion != null) { Cell[] cells = r.rawCells(); if (cells != null) { int length = cells.length; for (int i = 0; i < length; i++) { String qualifier = annotion.value(); if (qualifier.equalsIgnoreCase(new String(CellUtil.cloneQualifier(cells[i])))) { PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz); Method method = pd.getWriteMethod(); if((((NoTagsKeyValue) cells[i]).getKeyString()).contains("status")){ method.invoke(obj, (new String(CellUtil.cloneValue(cells[i])) ).equalsIgnoreCase("true")?true:false); }else{ method.invoke(obj, new String(CellUtil.cloneValue(cells[i])) + ""); } break; } } } } } list.add(obj); } } catch (Exception e) { logger.error("Error in BaseHBaseUtils.getRowkeyListByFilter().", e); } finally { free(conn, table); } return list; }