sql >> Database >  >> NoSQL >> MongoDB

Audio ophalen - binair bestand - opgeslagen in mijn Mlab

U hebt GridFS niet nodig voor bestanden kleiner dan 16 MB. U kunt binaire gegevens rechtstreeks in MongoDB opslaan met behulp van BSON's binaire type of codeer uw binaire gegevens en sla deze op als een tekenreeks. Base64 is een veelgebruikte coderingskeuze bij het opslaan van binaire gegevens als strings.

Zodra u de gegevens uit de database hebt opgehaald, kunt u deze naar een bestand schrijven met fs.writeFile .

Als u uw gegevens als een binair type heeft opgeslagen, kunt u een buffer doorgeven naar fs.writeFile . Als u uw gegevens heeft opgeslagen als een gecodeerde tekenreeks, kunt u een tekenreeks en een encoding . doorgeven keuze.

(Als u het bestand met Express wilt weergeven, kunt u het inhoudstype instellen en de gegevens verzenden met res.send )

Hier is een klein voorbeeld in NodeJS. Dit leest een audiobestand van schijf, slaat het op in een MongoDB-database als een binair type (met behulp van de Binair class), haalt het terug uit de database en schrijft het naar een nieuw bestand op schijf.

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()

Hoewel mensen binaire gegevens in de database opslaan, is het waarschijnlijk het meest gebruikelijk dat mensen bestanden opslaan in een bestandssysteem of in objectopslag (zoals Amazon S3). Dan zouden ze gewoon een link naar dat bestand in de database opslaan en dat bestand ophalen met behulp van de link. Je kunt doen waar je je het prettigst bij voelt.




  1. Hoeveel sneller is Redis dan mongoDB?

  2. Mongodb:retourneer overeenkomende filters bij gebruik van $or in find()

  3. Node.js &Redis / hget synchroniseren

  4. Mongoose save() werkt de waarde niet bij in een array in het databasedocument