Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb ReactiveMongo GridFS从磁盘保存文件时出错_Mongodb_Scala_Gridfs_Reactivemongo - Fatal编程技术网

Mongodb ReactiveMongo GridFS从磁盘保存文件时出错

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

我有一个应用程序,它使用gridFS存储一些东西的图像。Im使用gridFSBodyParser和控制器工作。现在,我需要从磁盘中植入一些数据,以便对特定的边缘情况进行测试,因为某些原因,我无法使用控制器。我有以下代码和相关导入-

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())))))