我正在以base64
消息的形式发送json
格式的图像。我想将图像存储在Cassandra
中。卡桑德拉(Cassandra)中的相应列是``图像列表''
json中的图像数据为
image:["data:image/png;base64,iVBORw...","data:image/png;base64,idfsd..."]
此json作为数组[String]映射到我的模型-
映射到json的模型类是
case class PracticeQuestion (id: Option[UUID],
d: String,
h: List[String],
image: Array[String],//images maps here
s: String,
f: String,
t: Set[String],
title: String,
a:String,
r:List[String])
我已阅读到要在cassandra中存储图像,我需要ByteBuffer。因此,我使用ByteBuffer.wrap()将数组的数组不同索引转换为ByteBuffer。但是我的insert
语句失败了。 Datastax
错误是
我正在尝试将Array[String]
转换为list<blob>
是
.value("image",seqAsJavaList(Seq[ByteBuffer](ByteBuffer.wrap(model.image(0).getBytes()))))
//for the moment, I am taking only 1 image
我拍摄第一个图像,获取其字节,创建一个BytesBuffer
。我将BytesBuffer
转换为Seq
,然后将Seq
转换为Java List
我看到的错误是com.datastax.driver.core.exceptions.InvalidTypeException: Value 6 of type class scala.collection.immutable.$colon$colon does not correspond to any CQL3 type
完整的插入命令是
QueryBuilder.insertInto(tableName).value("id",model.id.get) .value("answer",model.a)
.value("d",model.d)
.value("f",model.f)
.value("h",seqAsJavaList(model.h))
.value("image",seqAsJavaList(Seq[ByteBuffer](ByteBuffer.wrap(model.image(0).getBytes()))))
.value("r",model.r)
.value("s",model.s)
.value("t",setAsJavaSet(model.t))
.value("title",model.title)
.ifNotExists();
数据库架构为
id uuid PRIMARY KEY,
a text,
d text,
f text,
h list<text>,
image list<blob>,
r list<text>,
s text,
t set<text>,
title text