用java程序上传一张图片到hbase,检索完图片后发现文件大小的差异最终增大,大部分exif和元数据丢失(gps位置数据、相机细节等…)
代码:
public ArrayList<Object> uploadImagesToHbase(MultipartFile uploadedFileRef){
byte[] bytes =uploadedFileRef.getBytes();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", outputStream);
HBaseAdmin admin = new HBaseAdmin(configuration);
HTable table = new HTable(configuration, "sample");
Put image = new Put(Bytes.toBytes("1"));
image.add(Bytes.toBytes("DataColumn"), Bytes.toBytes(DataQualifier), bytes);
table.put(image);
如何在没有任何更改/丢失的情况下存储和检索图像?
2条答案
按热度按时间9cbw7uwe1#
很可能你把事情搞得太复杂了
丢失exif和其他元数据的原因是
ImageIO
便利方法ImageIO.read(...)
以及ImageIO.write(...)
不保留元数据。好消息是,他们不需要。因为你似乎已经有了
MultipartFile
,您只需将该数据(字节数组)存储在数据库中,就可以准确地存储用户上载的内容。文件大小没有差别,元数据将保持不变。上面的代码不适合我编译,我也不是hbaseMaven,所以我只保留了这一点(因为您已经能够存储图像,以查看大小/质量差异和元数据丢失,我假设您知道如何做到这一点:-))。但基本情况如下:
emeijp432#
请尝试使用apache commons lang中的serializationutils。
下面是一些方法
在hbase中存储时,可以存储serialize返回的字节[]。在获取对象时,可以为ex:file对象键入cast到相应的对象,然后可以将其取回。