我正在以base64
消息的形式发送json
格式的图片
image:["data:image/png;base64,iVBORw...","data:image/png;base64,idfsd..."]
我想将此图像存储在Cassandra
中。此json
以Array[String]
-
case class ImageArray(
image: Array[String]
}
我已阅读到要在cassandra中存储图像,我需要ByteBuffer。因此,我使用ByteBuffer.wrap()将数组的数组不同索引转换为ByteBuffer。
ByteBuffer.wrap(model.image(0).getBytes()) //for the moment, I am taking only 1 image
我无法弄清楚如何将ByteBuffer
转换回String
。我可以像下面这样从Cassandra
检索字节
(row.getBytes("image"))
以上内容给了我ByteBuffer
。如何将其转换为String
,以后可以用来创建Array[String]
答案 0 :(得分:0)
尽管我能够解决它,但是该方法非常缓慢,因此我放弃了将图像存储为字节并将其存储为字符串(base64)的想法,因为这是我从服务器上获得的。
为了解决这个问题,我做了一些更改。
随着Cassandra了解列表,将数组更改为模型中的列表
case class ImageArray(
image: List[String]
}
通过创建自定义Reads
-(JsPath \ "image").read[List[String]]
在cassandra
中,用于存储图像数组的表架构为image list<blob>,
模型中有了列表后,我便使用List
将其转换为String
的{{1}}到List
的{{1}}
上面,我获取了图像列表的第一个元素(一个字符串,它是索引0处图像的base64表示形式),使用Byte
将其转换为字节,然后将.value("image",seqAsJavaList(((ByteBuffer.wrap(model.image(0).getBytes())).array().toList):::((ByteBuffer.wrap(model.image(1).getBytes())).array().toList)))
转换为{{1} },然后将其转换为ByteBuffer.wrap
。这给了我ByteBuffer
作为第一张图片。我对image(1)重复此操作,然后使用Array
将两个图像合并。然后,我使用List
将此List[Byte]
:::
转换为Scala
。
注意:由于上述方法需要多次转换,因此这不是最佳方法。相反,我决定将图像存储为List [String]