GridFS nepotřebujete pro soubory menší než 16 MB. Binární data můžete ukládat přímo do MongoDB pomocí binárního typu BSON nebo zakódujte svá binární data a uložte je jako řetězec. Base64 je běžná volba kódování při ukládání binárních dat jako řetězce.
Jakmile načtete data z databáze, můžete je zapsat do souboru pomocí fs.writeFile
.
Pokud jste data uložili jako binární typ, můžete předat vyrovnávací paměť
na fs.writeFile
. Pokud jste svá data uložili jako kódovaný řetězec, můžete předat řetězec a encoding
volba.
(Pokud jste chtěli soubor poskytnout pomocí Express, můžete nastavit typ obsahu a odeslat data pomocí res.send
)
Zde je malý příklad v NodeJS. Toto načte zvukový soubor z disku a uloží jej do databáze MongoDB jako binární typ (pomocí ovladače MongoDB Binární class), načte jej zpět z databáze a zapíše jej do nového souboru na disku.
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()
Ačkoli lidé ukládají binární data do databáze, je pravděpodobně nejběžnější, že lidé ukládají soubory do souborového systému nebo do objektového úložiště (jako je Amazon S3). Pak by jen uložili odkaz na tento soubor do databáze a načetli tento soubor pomocí odkazu. Můžete dělat, co vám vyhovuje.