MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Rufen Sie die Audio-Binärdatei ab, die in meinem Mlab gespeichert ist

Für Dateien kleiner als 16 MB benötigen Sie kein GridFS. Sie können Binärdaten entweder direkt in MongoDB speichern, indem Sie BSONs Binärtyp verwenden oder codieren Sie Ihre Binärdaten und speichern Sie sie als Zeichenfolge. Base64 ist eine gängige Kodierungswahl beim Speichern von Binärdaten als Strings.

Sobald Sie die Daten aus der Datenbank abgerufen haben, können Sie sie mit fs.writeFile .

Wenn Sie Ihre Daten als Binärtyp gespeichert haben, können Sie einen Puffer übergeben zu fs.writeFile . Wenn Sie Ihre Daten als verschlüsselten String gespeichert haben, können Sie einen String und eine encoding übergeben Möglichkeit.

(Wenn Sie die Datei mit Express bereitstellen möchten, können Sie den Inhaltstyp festlegen und die Daten mit res.send )

Hier ist ein kleines Beispiel in NodeJS. Dies liest eine Audiodatei von der Festplatte und speichert sie als Binärtyp in einer MongoDB-Datenbank (unter Verwendung des Binär Klasse), ruft es aus der Datenbank zurück und schreibt es in eine neue Datei auf der Festplatte.

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

Obwohl Benutzer Binärdaten in der Datenbank speichern, ist es wahrscheinlich am häufigsten, dass Benutzer Dateien in einem Dateisystem oder in einem Objektspeicher (wie Amazon S3) speichern. Dann würden sie einfach einen Link zu dieser Datei in der Datenbank speichern und diese Datei über den Link abrufen. Sie können tun, womit Sie sich wohler fühlen.