TOP

在hbase上存儲文件以及下載
2019-02-16 01:39:58 】 瀏覽:1481
Tags:

因為hbase的存儲只支持文本。但當我們需要要一些文件類型上傳到hbase上的時候,如果使用文件流,將它轉成文本類型优乐棋牌app下载优乐棋牌app下载,上傳下載是沒有問題,可是這樣一來优乐棋牌app下载,新生成的文件與原始文件的里的格式(如DOC里的圖片)這樣的東西就不存在了,這樣的話,就沒有什么意義了。

因此,上傳到hbase的時候,可以通過將文件流轉換成BASE64的編碼,這樣,上傳下載仍是原文件。但是要注意的是,該文件的格式,如果格式不統一的話,還是不會出來的。

我就遇到過這樣的問題,該文件是docx格式的,我下載后轉成doc的,就會出問題。

下面是實現代碼

public String getSource(String URL) throws IOException{
	 File file = new File(URL);
	 file.length();
	 FileInputStream is = new FileInputStream(file);
	 byte[] bytes = new byte[(int) file.length()];
	 int len=0;
	 while( (len = is.read(bytes)) != -1 ){
	 is.read(bytes);
	 }
	 is.close();
	 BASE64Encoder be = new BASE64Encoder();
	 return be.encode(bytes);
}

public String down(String tablename,String rowkey) throws IOException{
BASE64Decoder db = new BASE64Decoder();
String Content="";
HTable talbe =new HTable(tablename);
Result result = null;
Get get = new Get(Bytes.toBytes(Id));
get.addFamily(Bytes.toBytes("property"));//這是在hbase上存儲的該文件的一些屬性
get.addFamily(Bytes.toBytes("content"));//這是在hbase上存儲該文件的BASE64編碼的列族名
result = table.get(get);
table.close();
Content = Bytes.toString(r.getValue(Bytes.toBytes("content"), Bytes
					.toBytes("content")));//獲得到該文件的文本
String title=Bytes.toString(r.getValue(Bytes.toBytes("property"),Bytes.toBytes("title")));
String downurl=tmp+title;
byte c[] = bd.decodeBuffer(tmp);
		FileOutputStream out = new FileOutputStream(new File(downurl));
		out.write(c);
		out.close();
	return downurl;
}

這是臨時寫的簡宜代碼,有很多不足之處。

請關注公眾號獲取更多資料



】【打印繁體】【】【】 【】【】【】 【關閉】 【返回頂部
上一篇hbase快速入門--hTable 下一篇Spark 操作Hbase 對表的操作:..