MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Recuperar áudio - arquivo binário - armazenado no meu Mlab


Você não precisa do GridFS para arquivos menores que 16 MB. Você pode armazenar dados binários diretamente no MongoDB usando o tipo binário do BSON ou codifique seus dados binários e armazene-os como uma string. Base64 é uma opção de codificação comum ao armazenar dados binários como strings.

Depois de recuperar os dados do banco de dados, você pode gravá-los em um arquivo usando fs.writeFile .

Se você salvou seus dados como um tipo binário, você pode passar um buffer para fs.writeFile . Se você salvou seus dados como uma string codificada, você pode passar uma string e uma encoding opção.

(Se quiser servir o arquivo com Express, você pode definir o tipo de conteúdo e enviar os dados usando res.send )

Aqui está um pequeno exemplo em NodeJS. Isso lê um arquivo de áudio do disco, salva-o em um banco de dados MongoDB como um tipo binário (usando o driver do MongoDB Binário class), recupera-o do banco de dados e o grava em um novo arquivo no disco.
const mongodb = require('mongodb')
const util = require('util')
const fs = require('fs')
const readFile = util.promisify(fs.readFile)
const writeFile = util.promisify(fs.writeFile)

async function main() {
  const client = await mongodb.MongoClient.connect(process.env.MONGO_URI)
  console.log('connected')

  let db = await client.db('dbname')

  // Reading in binary data from a file. data is a buffer.
  let data = await readFile(__dirname + '/sample.mp3')

  // Insert binary data to the database
  let res = await db.collection('coll').insert({data: new mongodb.Binary(data)})
  console.log(res)
  let objectId = res.ops[0]._id

  // Retrieve binary data from the database
  let obj = await db.collection('coll').findOne({_id: objectId})
  console.log(obj)

  // *** This is the key part ***
  // use obj.data.read to get a buffer from the binary data and write that buffer to a file
  await writeFile(__dirname + '/out.mp3', obj.data.read(0, obj.data.length()))

  console.log('done')
}

main()

Embora as pessoas armazenem dados binários no banco de dados, provavelmente é mais comum armazenar arquivos em um sistema de arquivos ou em armazenamento de objetos (como o Amazon S3). Em seguida, eles apenas armazenariam um link para esse arquivo no banco de dados e recuperariam esse arquivo usando o link. Você pode fazer o que achar mais confortável.