Nie potrzebujesz GridFS dla plików mniejszych niż 16 MB. Możesz przechowywać dane binarne bezpośrednio w MongoDB przy użyciu typu binarnego BSON lub zakoduj swoje dane binarne i przechowuj je jako ciąg. Base64 jest powszechnym wyborem kodowania podczas przechowywania danych binarnych jako ciągów.
Po pobraniu danych z bazy danych możesz zapisać je do pliku za pomocą fs.writeFile
.
Jeśli zapisałeś swoje dane jako typ binarny, możesz przekazać bufor
do fs.writeFile
. Jeśli zapisałeś swoje dane jako zakodowany ciąg, możesz przekazać ciąg i encoding
opcja.
(Jeśli chcesz udostępnić plik za pomocą Express, możesz ustawić typ treści i wysłać dane za pomocą res.send
)
Oto mały przykład w NodeJS. Odczytuje plik audio z dysku, zapisuje go w bazie danych MongoDB jako typ binarny (przy użyciu Binarny klasy), pobiera go z powrotem z bazy danych i zapisuje w nowym pliku na dysku.
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()
Chociaż ludzie przechowują dane binarne w bazie danych, prawdopodobnie najczęściej przechowują pliki w systemie plików lub w obiektowej pamięci masowej (takiej jak Amazon S3). Wtedy po prostu zapisaliby link do tego pliku w bazie danych i odzyskali ten plik za pomocą linku. Możesz zrobić to, z czym czujesz się bardziej komfortowo.