[英]Store image in Hbase loss of Meta data and Exif
使用Java程序将图像上传到hbase,在检索图像后,我发现文件大小的差异最终会增加,并且大部分Exif和Meta数据丢失(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);
如何存储和检索没有任何更改/丢失的图像?
请尝试使用来自Apache Commons Lang的SerializationUtils 。
以下是方法
static Object clone(Serializable object) //Deep clone an Object using serialization.
static Object deserialize(byte[] objectData) //Deserializes a single Object from an array of bytes.
static Object deserialize(InputStream inputStream) //Deserializes an Object from the specified stream.
static byte[] serialize(Serializable obj) //Serializes an Object to a byte array for storage/serialization.
static void serialize(Serializable obj, OutputStream outputStream) //Serializes an Object to the specified stream.
当存储到hbase中时,您可以存储从序列化返回的byte []。 在获取对象时,您可以将类型转换为对应的对象,例如ex:File对象,然后可以将其取回。
您很可能只是使事情变得过于复杂。 :-)
之所以丢失Exif和其他元数据,是因为ImageIO
便捷方法ImageIO.read(...)
和ImageIO.write(...)
不会保留元数据。 好消息是,不需要它们。
好像您已经从MultipartFile
获取图像数据一样,您应该仅将数据(字节数组)存储在数据库中,并且将确切存储用户上传的内容。 文件大小没有差异,并且元数据将保持不变。
您上面的代码无法为我编译,我也不是HBase专家,因此我将其排除在外(因为您已经能够存储图像,以查看大小/质量差异和元数据丢失,所以我假设您知道该怎么做:-))。 但是这里是基础:
public ArrayList<Object> uploadImagesToHbase(MultipartFile uploadedFileRef) {
byte[] bytes = uploadedFileRef.getBytes();
// Store the above "bytes" byte array in HBase *as is* (no ImageIO)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.