Scala 如何在Cassandra中存储和检索base64编码图像
我正在以Scala 如何在Cassandra中存储和检索base64编码图像,scala,cassandra-3.0,Scala,Cassandra 3.0,我正在以json消息发送base64格式的图像 image:[“数据:image/png;base64,iVBORw…”,“数据:image/png;base64,idfsd…”] 我想将此图像存储在Cassandra中。这个json以数组[String]的形式映射到我的模型 case class ImageArray( image: Array[String] } 我读过,为了在卡桑德拉存储图像,我需要ByteBuffer。因此,我使用ByteBuffer.wrap()将数组的不同索引转换为
json
消息发送base64
格式的图像
image:[“数据:image/png;base64,iVBORw…”,“数据:image/png;base64,idfsd…”]
我想将此图像存储在Cassandra
中。这个json
以数组[String]
的形式映射到我的模型
case class ImageArray(
image: Array[String]
}
我读过,为了在卡桑德拉存储图像,我需要ByteBuffer。因此,我使用ByteBuffer.wrap()将数组的不同索引转换为ByteBuffer
ByteBuffer.wrap(model.image(0).getBytes()) //for the moment, I am taking only 1 image
我不知道如何将字节缓冲符
转换回字符串
。我可以从Cassandra中检索字节,如下所示
(row.getBytes("image"))
上面给了我一个
ByteBuffer
。如何将其转换为字符串
,稍后我可以使用该字符串创建数组[String]
虽然我能够解决它,但该方法非常慢,因此我放弃了将图像存储为字节并将其保存为字符串(base64)的想法,因为这是我从服务器获得的结果
谈到原始问题,为了解决问题,我做了一些修改
将模型中的数组更改为列表,因为Cassandra了解列表
case class ImageArray(
image: List[String]
}
通过创建自定义的来映射到图像列表的json数组或图像将读取
-(JsPath\“image”)。读取[list[String]
在cassandra
中,存储图像数组的表模式是image list,
一旦我在模型中有了这个列表,我就使用.value(“image”,seqAsJavaList(((ByteBuffer.wrap(model.image(0.getBytes()).array().toList)::((ByteBuffer.wrap(model.image(1.getBytes()).array()))
在上面,我获取图像列表的第一个元素(一个字符串,它是索引0处图像的base64表示形式),使用ByteBuffer.wrap
将其转换为字节,然后将ByteBuffer
转换为Array
,然后将其转换为list
。这给了我第一张图片的列表[Byte]
。我对图像(1)重复它,然后使用:
将两个图像连接起来。然后我使用seqAsJavaList
将这个Scala
List
转换成Java
注意:由于上述方法需要多次转换,因此不是最佳方法。相反,我决定将图像存储为List[String]我已经完成了数组((row.getBytes(“image”)).asCharBuffer().toString)
。这个看起来可以吗?我担心转换是否会因为使用不同的字符编码而不正确。我想不是因为我在同一平台上进行编码和解码(服务器端)