Mongodb ReactiveMongo GridFS从磁盘保存文件时出错
我有一个应用程序,它使用gridFS存储一些东西的图像。Im使用gridFSBodyParser和控制器工作。现在,我需要从磁盘中植入一些数据,以便对特定的边缘情况进行测试,因为某些原因,我无法使用控制器。我有以下代码和相关导入-Mongodb ReactiveMongo GridFS从磁盘保存文件时出错,mongodb,scala,gridfs,reactivemongo,Mongodb,Scala,Gridfs,Reactivemongo,我有一个应用程序,它使用gridFS存储一些东西的图像。Im使用gridFSBodyParser和控制器工作。现在,我需要从磁盘中植入一些数据,以便对特定的边缘情况进行测试,因为某些原因,我无法使用控制器。我有以下代码和相关导入- import java.nio.file.{Files, Paths} import com.cookit.allergy.Allergy import play.api.libs.iteratee.Enumerator import play.modules.rea
import java.nio.file.{Files, Paths}
import com.cookit.allergy.Allergy
import play.api.libs.iteratee.Enumerator
import play.modules.reactivemongo.MongoController.readFileReads
import play.modules.reactivemongo.ReactiveMongoApi
import reactivemongo.play.json._
def seedTestData(....) = {
for {
//create actual entity
obj <- createEntity(....)
//create avatar for entity
gridFS <- mongo.asyncGridFS.flatMap(gridFS => {
val url = this.getClass.getClassLoader.getResource("test.jpg")
gridFS.save(
Enumerator.enumerate(List(Files.readAllBytes(Paths.get(url.getPath)))),
gridFS.fileToSave(Some(name), Some("image/jpeg"), None, buildMD(obj)))
}).map(result => {
logger.info(.....)
}).recover({
case e: Exception =>
logger.error(....)
e.printStackTrace()
throw e
})
} yield {
....
}
}
我怀疑这与JSON序列化有关,但我无法确切地找出问题所在。基本上,我最终传递了一个自定义的
FileToSave[JSONSerializationPack.type,JsValue]
实现,而不是gridFS.FileToSave(…)
并覆盖了pack、filename、contentType、,uploadDate和元数据字段。错误消息非常清楚:错误的ObjectId(长度!=24):'4c75f45d255045a2aac01fdbbe031c11'
。。。给定的值是一个32字节的六进制字符串,而对象ID最多应该是24字节…您没有指明版本(枚举的值不再用于最近的gridfs api)。另外,json序列化对此类测试没有用处,顺便说一句,在1.0中转换为bson序列化将取代json序列化。不知怎的,我觉得您刚才回复了一条注释,我看不到。奇怪的是怎么发生的。。。。reactivemongo版本为0.20。建议不要使用JSON序列化和/或更新到最新版本。
play.api.libs.json.JsResultException: JsResultException(errors:List((,List(JsonValidationError(List(List((,List(JsonValidationError(List(List((,List(JsonValidationError(List(List((,List(JsonValidationError(List(Wrong ObjectId (length != 24): '4c75f45d255045a2aac01fdbbe031c11'),WrappedArray()))))),WrappedArray()))))),WrappedArray()))))),WrappedArray())))))