В нашем новом проекте в качестве файлового хранилища мы решили использовать GridFS. GridFS эффективен для файлов размером свыше 16 МБ, поэтому мы решили хранить файлы менее 16 МБ в виде байтов в MongoDB. К тому же GridFS - это всего лишь надстройка над MongoDB, и размер документа MongoDB ограничен как раз 16 мегабайтами.
Для начала нужно в
build.sbt добавить зависимость на стандартный драйвер MongoDB:
"org.mongodb" % "mongo-java-driver" % "3.3.0"
Далее в
application.conf прописать переменные, который мы будем использовать для подключения к MongoDB.
mongodb.uri="mongodb://192.168.99.100:27017"
mongodb.db="your_database_name"
И, собственно, реализация класса для работы с MongoDB и GridFS:
package services.file
import javax.inject.{Inject, Singleton}
import com.mongodb.client.gridfs.{GridFSBuckets, GridFSBucket}
import com.mongodb.{MongoClient, MongoClientURI}
import play.api.{Logger, Configuration}
@Singleton
class MongoService @Inject() (conf: Configuration) {
val uri = conf.underlying.getString("mongodb.uri")
val db = conf.underlying.getString("mongodb.db")
Logger.debug("mongodb.uri = " + uri)
Logger.debug("mongodb.db = " + db)
val mongoClient = new MongoClient(new MongoClientURI(uri))
val database = mongoClient.getDatabase(db)
val wholeFileCollection = database.getCollection("whole-files")
//GridFS
val gridFSBucket: GridFSBucket = GridFSBuckets.create(database, "chunked-files")
}