Как переопределить файл gridfs в Play Framework с помощью реактивного монго?

У меня есть следующий код для записи файла gridfs:

  request.body.files.toList.lastOption match {
    case Some(picture) => {
      val filename = picture.filename
      val contentType = picture.contentType
      picture.ref.moveTo(new File("/tmp/" + filename), true)

      val gridFS = new GridFS(db, "attachments")
      val fileToSave = DefaultFileToSave(filename, contentType)

      val futureResult: Future[ReadFile[BSONValue]] = gridFS.writeFromInputStream(fileToSave, new FileInputStream(new File("/tmp/" + filename)))
      ...

Код работает нормально, но он дублирует файлы в коллекции, когда я пишу два файла с одинаковым именем. Я думал создать уникальный индекс, используя поле имени файла, но это сохранило бы первый файл, и мне нужно сохранить самую новую версию. Как мне это сделать?

Спасибо,

GA


person G A    schedule 27.08.2013    source источник


Ответы (1)


  1. удалить индекс для имени файла
  2. загрузите новый файл, это нормально, если несколько версий файла имеют одинаковое имя
  3. перепишите запрос примерно так: find({filename: "some-file-name.txt"}).sort({uploadDate: -1}).limit(1), в результате вы получите только самые последние
  4. вы можете использовать метку времени из нового загруженного файла, чтобы удалить все файлы с тем же именем и меньшей меткой времени
person Schleichardt    schedule 28.08.2013