Anda tidak memerlukan GridFS untuk file yang lebih kecil dari 16 MB. Anda dapat menyimpan data biner secara langsung di MongoDB menggunakan tipe biner BSON atau menyandikan data biner Anda dan menyimpannya sebagai string. Base64 adalah pilihan pengkodean umum saat menyimpan data biner sebagai string.
Setelah Anda mengambil data dari database, Anda dapat menulisnya ke file menggunakan fs.writeFile
.
Jika Anda menyimpan data sebagai tipe biner, Anda dapat meneruskan buffer
ke fs.writeFile
. Jika Anda menyimpan data sebagai string yang disandikan, Anda dapat meneruskan string dan encoding
pilihan.
(Jika Anda ingin menyajikan file dengan Express, Anda dapat mengatur jenis konten dan mengirim data menggunakan res.send
)
Berikut adalah contoh kecil di NodeJS. Ini membaca file audio dari disk, menyimpannya ke database MongoDB sebagai tipe biner (menggunakan driver MongoDB Biner class), mengambilnya kembali dari database, dan menulisnya ke file baru di disk.
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()
Meskipun orang menyimpan data biner dalam database, mungkin paling umum bagi orang untuk menyimpan file dalam sistem file atau dalam penyimpanan objek (seperti Amazon S3). Kemudian mereka hanya akan menyimpan tautan ke file itu di database dan mengambil file itu menggunakan tautan itu. Anda dapat melakukan apa pun yang Anda rasa lebih nyaman.