Skip to content

Files Plugin ​

To add your own FileHandler you have to implement the trait dev.mongocamp.server.plugin.FilePlugin.

Every MongoCamp Server Instance can have only active File Handler by setting the Config AUTH_HANDLER.

Sample ​

scala
package dev.mongocamp.server.file

import better.files.File
import dev.mongocamp.driver.mongodb.{ GenericObservable, _ }
import dev.mongocamp.server.converter.MongoCampBsonConverter.convertIdField
import dev.mongocamp.server.database.MongoDatabase
import dev.mongocamp.server.model.BucketInformation.GridFsBucketChunksSuffix
import dev.mongocamp.server.plugin.FilePlugin
import org.mongodb.scala.bson.ObjectId

class GridFsFileAdapter extends FilePlugin {
  override val name: String = "gridfs"

  override def getFile(bucket: String, fileId: String): File = {
    object FilesDAO extends GridFSDAO(MongoDatabase.databaseProvider, bucket)
    val tmpFile = File.newTemporaryFile()
    FilesDAO.downloadFileResult(convertIdField(fileId), tmpFile)
    tmpFile
  }

  override def putFile(bucket: String, fileId: String, file: File): Boolean = ???

  override def size(bucket: String): Double = {
    MongoDatabase.databaseProvider.dao(s"$bucket$GridFsBucketChunksSuffix").collectionStatus.result().size
  }

  override def delete(bucket: String): Unit = {
    MongoDatabase.databaseProvider.dao(s"$bucket$GridFsBucketChunksSuffix").drop().result()
  }

  override def clear(bucket: String): Boolean = {
    MongoDatabase.databaseProvider.dao(s"$bucket$GridFsBucketChunksSuffix").deleteAll().result().wasAcknowledged()
  }

  override def deleteFile(bucket: String, fileId: String): Boolean = {
    val deleteResult = MongoDatabase.databaseProvider.dao(s"$bucket$GridFsBucketChunksSuffix").deleteMany(Map("files_id" -> new ObjectId(fileId))).result()
    deleteResult.wasAcknowledged() && deleteResult.getDeletedCount == 1
  }

}

Released under the Apache License 2.0.