MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Recupera l'audio - file binario - archiviato nel mio Mlab

Non è necessario GridFS per file di dimensioni inferiori a 16 MB. Puoi archiviare i dati binari direttamente in MongoDB utilizzando tipo binario di BSON oppure codifica i tuoi dati binari e archiviali come stringa. Base64 è una scelta di codifica comune quando si archiviano dati binari come stringhe.

Una volta recuperati i dati dal database, puoi scriverli in un file utilizzando fs.writeFile .

Se hai salvato i tuoi dati come tipo binario, puoi passare un buffer in fs.writeFile . Se hai salvato i tuoi dati come stringa codificata, puoi passare una stringa e una encoding opzione.

(Se desideri pubblicare il file con Express, puoi impostare il tipo di contenuto e inviare i dati utilizzando res.send )

Ecco un piccolo esempio in NodeJS. Questo legge un file audio dal disco, lo salva in un database MongoDB come tipo binario (usando il driver MongoDB Binario class), lo recupera dal database e lo scrive in un nuovo file su 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()

Sebbene le persone memorizzino i dati binari nel database, è probabilmente più comune per le persone archiviare i file in un file system o in uno storage di oggetti (come Amazon S3). Quindi memorizzerebbero semplicemente un collegamento a quel file nel database e recupereranno quel file utilizzando il collegamento. Puoi fare quello con cui ti senti più a tuo agio.