GridFS не нужна для файлов размером менее 16 МБ.Вы можете либо хранить двоичные данные непосредственно в MongoDB, используя двоичный тип BSON , либо кодировать свои двоичные данные и сохранять их в виде строки.Base64 - это обычный выбор кодировки при хранении двоичных данных в виде строк.
После того, как вы извлечете данные из базы данных, вы можете записать их в файл, используя fs.writeFile
.
Если вы сохранили данные в двоичном виде, вы можете передать буфер в fs.writeFile
.Если вы сохранили свои данные в виде закодированной строки, вы можете передать строку и параметр encoding
.
(Если вы хотите передать файл в Express, вы можете установить тип содержимого и отправить данные, используя res.send
)
Вот небольшой пример в NodeJS,Это считывает аудиофайл с диска, сохраняет его в базе данных MongoDB как двоичный тип (используя класс Binary драйвера MongoDB), извлекает его из базы данных и записывает в новый файл на диске.
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()
Несмотря на то, что люди хранят двоичные данные в базе данных, люди, вероятно, чаще всего хранят файлы в файловой системе или в хранилище объектов (например, Amazon S3).Затем они просто сохранят ссылку на этот файл в базе данных и получат этот файл, используя ссылку.Вы можете делать то, что вам удобнее.