sql >> Base de Datos >  >> NoSQL >> MongoDB

Recuperar audio - archivo binario - almacenado en mi Mlab

No necesita GridFS para archivos de menos de 16 MB. Puede almacenar datos binarios directamente en MongoDB usando tipo binario de BSON o codifique sus datos binarios y guárdelos como una cadena. Base64 es una opción de codificación común cuando se almacenan datos binarios como cadenas.

Una vez que recupere los datos de la base de datos, puede escribirlos en un archivo usando fs.writeFile .

Si guardó sus datos como un tipo binario, puede pasar un búfer a fs.writeFile . Si guardó sus datos como una cadena codificada, puede pasar una cadena y una encoding opción.

(Si desea entregar el archivo con Express, puede configurar el tipo de contenido y enviar los datos usando res.send )

Aquí hay un pequeño ejemplo en NodeJS. Esto lee un archivo de audio del disco, lo guarda en una base de datos MongoDB como un tipo binario (usando el controlador MongoDB Binario clase), lo recupera de la base de datos y lo escribe en un nuevo archivo en el 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()

Aunque las personas almacenan datos binarios en la base de datos, probablemente sea más común que las personas almacenen archivos en un sistema de archivos o en el almacenamiento de objetos (como Amazon S3). Luego, simplemente almacenarían un enlace a ese archivo en la base de datos y recuperarían ese archivo usando el enlace. Puedes hacer lo que te resulte más cómodo.