Menu Docs
Página inicial do Docs
/ / /
Scala
/

GridFS

Nesta página

  • Pré-requisitos
  • Conecte-se a um MongoDB deployment
  • Crie um intervalo GridFS
  • Carregar no GridFS
  • Encontre arquivos armazenados no GridFS
  • Baixar do GridFS
  • Renomear arquivos
  • Excluir arquivos

GridFS é uma especificação para armazenar e recuperar arquivos que excedem o limite de tamanho do documento BSON de 16 MB. Em vez de armazenar um arquivo grande em um único documento, o GridFS divide um arquivo em partes, ou chunks, e armazena cada um desses chunks como documentos separados.

Quando você consulta um armazenamento GridFS para um arquivo, o driver reagrupa os blocos conforme necessário.

Os exemplos de código neste guia vêm do GridFSTour.scalano Github repositório do do código fonte do driver.

Você deve incluir as seguintes declarações de importação em seu programa para executar os exemplos de código neste guia:

import java.nio.ByteBuffer
import java.nio.charset.StandardCharsets
import org.mongodb.scala._
import org.mongodb.scala.bson.BsonObjectId
import org.mongodb.scala.gridfs._
import org.mongodb.scala.model.Filters
import tour.Helpers._
import scala.util.Success

Observação

Este guia usa as implicações implícitas de Observable , conforme abordadas no Quick Start Primary.

Primeiro, conecte-se a um MongoDB deployment e declare e defina uma instância MongoDatabase .

O código a seguir se conecta a uma MongoDB deployment standalone em execução em localhost na porta 27017:

val mongoClient: MongoClient = MongoClient()

Para saber mais sobre como se conectar a sistemas do MongoDB, consulte o guia Conectar ao MongoDB .

O GridFS armazena arquivos em duas collections:

  • chunks: armazena os blocos de arquivo

  • files: armazena metadados do arquivo

As duas collections estão em um bucket comum e os nomes das collections são prefixados com o nome do bucket.

O driver fornece o método GridFSBucket() para criar instâncias GridFSBucket :

val myDatabase = mongoClient.getDatabase("mydb")
// Create a gridFSBucket using the default bucket name "fs"
val gridFSBucket = GridFSBucket(myDatabase)

Você pode passar um nome de bucket para o método GridFSBucket() :

// Create a gridFSBucket with a custom bucket name "files"
val gridFSFilesBucket = GridFSBucket(myDatabase, "files")

Observação

O GridFS cria automaticamente índices nas coleções files e chunks quando você carrega dados no contêiner GridFS.

O método GridFSBucket.uploadFromObservable() lê o conteúdo de um Observable[ByteBuffer] e o salva na instância GridFSBucket .

Você pode usar o tipo GridFSUploadOptions para configurar o tamanho do chunk ou incluir metadados adicionais.

O exemplo a seguir carrega o conteúdo de um Observable[ByteBuffer] em GridFSBucket:

// Get the input stream
val observableToUploadFrom: Observable[ByteBuffer] = Observable(
Seq(ByteBuffer.wrap("MongoDB Tutorial".getBytes(StandardCharsets.UTF_8)))
)
// Create some custom options
val options: GridFSUploadOptions = new GridFSUploadOptions()
.chunkSizeBytes(358400)
.metadata(Document("type" -> "presentation"))
val fileId: BsonObjectId = gridFSBucket
.uploadFromObservable("mongodb-tutorial", observableToUploadFrom, options)
.headResult()

Para localizar os arquivos armazenados no GridFSBucket, use o método find() .

O exemplo a seguir imprime o nome de cada arquivo armazenado:

gridFSBucket.find().results().foreach(file => println(s" - ${file.getFilename}"))

Você também pode fornecer um filtro personalizado para limitar os resultados retornados. O exemplo a seguir imprime os nomes de todos os arquivos em que o valor contentType é um valor image/png no documento de metadados definido pelo usuário:

gridFSBucket
.find(Filters.equal("metadata.contentType", "image/png"))
.results()
.foreach(file => println(s" > ${file.getFilename}"))

O método downloadToObservable() retorna um Observable[ByteBuffer] que lê o conteúdo do MongoDB.

Para baixar um arquivo pelo _id, passe o _id para o método . O exemplo a seguir baixa um arquivo pelo arquivo _id:

val downloadById = gridFSBucket.downloadToObservable(fileId).results()

Se você não souber o _id do arquivo, mas souber o nome do arquivo, poderá passar o nome do arquivo para o método downloadToObservable() . Por padrão, ele baixará a versão mais recente do arquivo. Utilize a classe GridFSDownloadOptions para configurar qual versão baixar.

O exemplo a seguir baixa a versão original do arquivo chamado mongodb-tutorial:

val downloadOptions: GridFSDownloadOptions = new GridFSDownloadOptions().revision(0)
val downloadByName = gridFSBucket.downloadToObservable("mongodb-tutorial", downloadOptions).results()

Se você precisar renomear um arquivo, use o método rename() .

O exemplo a seguir renomeia um arquivo para mongodbTutorial:

val fileId: ObjectId = ... // ObjectId of a file uploaded to GridFS
gridFSBucket.rename(fileId, "mongodbTutorial").printResults()

Observação

O método rename() exige um ObjectId em vez de um filename para garantir que o arquivo correto seja renomeado.

Para renomear várias revisões do mesmo nome de arquivo, primeiro recupere a lista completa de arquivos. Em seguida, para cada arquivo que deve ser renomeado, execute rename() com o _id correspondente.

Para excluir um arquivo do GridFSBucket, utilize o método delete() .

O exemplo seguinte exclui um arquivo do GridFSBucket:

val fileId: ObjectId = ... //ObjectId of a file uploaded to GridFS
gridFSBucket.delete(fileId).printResults()

Voltar

Atlas Searchgeoespacial