Как переопределить файл 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)))
      ...

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

Спасибо,

Джорджия

1 ответ

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