Du behøver ikke GridFS for filer mindre end 16 MB. Du kan enten gemme binære data direkte i MongoDB ved hjælp af BSONs binære type eller indkode dine binære data og gem dem som en streng. Base64 er et almindeligt kodningsvalg ved lagring af binære data som strenge.
Når du har hentet dataene fra databasen, kan du skrive dem til en fil ved hjælp af fs.writeFile
.
Hvis du har gemt dine data som en binær type, kan du sende en buffer
til fs.writeFile
. Hvis du har gemt dine data som en kodet streng, kan du sende en streng og en encoding
mulighed.
(Hvis du vil servere filen med Express, kan du indstille indholdstypen og sende dataene ved hjælp af res.send
)
Her er et lille eksempel i NodeJS. Dette læser en lydfil fra disken, gemmer den i en MongoDB-database som en binær type (ved hjælp af MongoDB-driverens Binær klasse), henter den tilbage fra databasen og skriver den til en ny fil på disken.
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()
Selvom folk gemmer binære data i databasen, er det nok mest almindeligt, at folk gemmer filer i et filsystem eller i objektlager (såsom Amazon S3). Så ville de bare gemme et link til den fil i databasen og hente den fil ved hjælp af linket. Du kan gøre, hvad du føler dig bedst tilpas med.