图片导出ZIP包前端到后端的流程代码

前端对应的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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值