收藏私塾在线
 

欢迎您来到私塾在线网!   

请登录! 

免费注册 

交流首页 » 灌水乐园 »在hbase上存储文件以及下载  XML
发表人 内容
sunshinexiaobin
[头像]

交流经验:
总积分:214
级别:普通会员
注册时间: 2012-05-26
文章: 202
离线

因为hbase的存储只支持文本。但当我们需要要一些文件类型上传到hbase上的时候,如果使用文件流,将它转成文本类型,上传下载是没有问题,可是这样一来,新生成的文件与原始文件的里的格式(如DOC里的图片)这样的东西就不存在了,这样的话,就没有什么意义了。

因此,上传到hbase的时候,可以通过将文件流转换成BASE64的编码,这样,上传下载仍是原文件。但是要注意的是,该文件的格式,如果格式不统一的话,还是不会出来的。

我就遇到过这样的问题,该文件是docx格式的,我下载后转成doc的,就会出问题。

下面是实现代码

Java代码    收藏代码
  1. public String getSource(String URL) throws IOException{  
  2.      File file = new File(URL);  
  3.      file.length();  
  4.      FileInputStream is = new FileInputStream(file);  
  5.      byte[] bytes = new byte[(int) file.length()];  
  6.      int len=0;  
  7.      while( (len = is.read(bytes)) != -1 ){  
  8.      is.read(bytes);  
  9.      }  
  10.      is.close();  
  11.      BASE64Encoder be = new BASE64Encoder();  
  12.      return be.encode(bytes);  
  13. }  

 

Java代码    收藏代码
  1. public String down(String tablename,String rowkey) throws IOException{  
  2. BASE64Decoder db = new BASE64Decoder();  
  3. String Content="";  
  4. HTable talbe =new HTable(tablename);  
  5. Result result = null;  
  6. Get get = new Get(Bytes.toBytes(Id));  
  7. get.addFamily(Bytes.toBytes("property"));//这是在hbase上存储的该文件的一些属性  
  8. get.addFamily(Bytes.toBytes("content"));//这是在hbase上存储该文件的BASE64编码的列族名  
  9. result = table.get(get);  
  10. table.close();  
  11. Content = Bytes.toString(r.getValue(Bytes.toBytes("content"), Bytes  
  12.                     .toBytes("content")));//获得到该文件的文本  
  13. String title=Bytes.toString(r.getValue(Bytes.toBytes("property"),Bytes.toBytes("title")));  
  14. String downurl=tmp+title;  
  15. byte c[] = bd.decodeBuffer(tmp);  
  16.         FileOutputStream out = new FileOutputStream(new File(downurl));  
  17.         out.write(c);  
  18.         out.close();  
  19.     return downurl;  
  20. }  

推广链接
精品视频课程推荐

Java数据结构和算法精讲版
本课程专注于数据结构和算法的内容,使用Java来进行代码示例,不空洞的讲解概念和理论,重点放在代码的实现和示例上。 从零开始、全面系统、成体系的讲解数据结构和基本算法,循序渐进的讲述构建软件系统所常见的数据结构和算法。

研磨设计模式——跟着cc学设计系列视频教程
本视频课程是北京Java私塾原创精品书籍《研磨设计模式》一书的配套学习视频,由《研磨设计模式》的第一作者CC录制 课程目标:全面、系统的掌握GoF设计模式的知识,达到可以在实际项目开发中运用的能力 技术要点:如何实现可配置、如何实现缓存以及缓存的管理、如何实现用缓存来控制多实例的创建、如何实现参数化工厂、 如何实现可扩展工厂、如何实现原型管理器、如何实现Java的静态代理和动态代理、如何实现多线程处理队列请求、 如何实现命令的参数化配置、可撤销的操作、宏命令、队列请求和日志请求、如何实现翻页迭代、如何检测环状结构、 如何实现通用的增删改查、如何模拟工作流来处理流程、如何实现简单又通用的XML读取、如何实现模拟AOP的功能......

Java Web开发-项目部分(中国移动科技综合管理系统)视频教程
中国移动科技综合管理系统,对JDBC实现CRUD的抽象化和复用化;UUID自动生成;分层开发、综合示范Jsp+Servlet+JavaBean+TagLib+JSTL+JDBC的实现;Web分页、Web树、日期控件、真实值和表现值转换;众多杂项技术的实现,比如:tab、左右选择等等

log4j&slf4j基础实战视频教程
学习在java项目中使用log4j、jdk自带的日志框架和slf4j

Javascript基础视频教程
JavaScript的内置对象--Array、String、Date、Math等,可以通过DOM对象进行对象控制,创建控制菜单及复选框的控制,创建二级联动列表框及列表框选项的移动,JavaScript项目,创建基于JS的商品管理系统。



个性签名:努力就好!!!
1040426125
[头像]

交流经验:
总积分:102
级别:普通会员
注册时间: 2011-12-14
文章: 2
离线

请问,还能留个QQ 啊
 
交流首页 » 灌水乐园
前往:   

关于我们 | 联系我们 | 用户协议 | 私塾在线服务协议 | 版权声明 | 隐私保护

版权所有 Copyright(C)2009-2012 私塾在线学习网