Bạn không cần GridFS cho các tệp nhỏ hơn 16 MB. Bạn có thể lưu trữ dữ liệu nhị phân trực tiếp trong MongoDB bằng cách sử dụng loại nhị phân của BSON hoặc mã hóa dữ liệu nhị phân của bạn và lưu trữ dưới dạng chuỗi. Base64 là lựa chọn mã hóa phổ biến khi lưu trữ dữ liệu nhị phân dưới dạng chuỗi.
Sau khi truy xuất dữ liệu từ cơ sở dữ liệu, bạn có thể ghi dữ liệu đó vào tệp bằng fs.writeFile
.
Nếu bạn đã lưu dữ liệu của mình dưới dạng nhị phân, bạn có thể chuyển một vùng đệm
thành fs.writeFile
. Nếu bạn đã lưu dữ liệu của mình dưới dạng một chuỗi được mã hóa, bạn có thể chuyển một chuỗi và một encoding
quyền mua.
(Nếu bạn muốn phân phát tệp bằng Express, bạn có thể đặt loại nội dung và gửi dữ liệu bằng cách sử dụng res.send
)
Đây là một ví dụ nhỏ trong NodeJS. Thao tác này đọc tệp âm thanh từ đĩa, lưu vào cơ sở dữ liệu MongoDB dưới dạng nhị phân (sử dụng trình điều khiển MongoDB Binary class), lấy lại nó từ cơ sở dữ liệu và ghi nó vào một tệp mới trên đĩa.
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()
Mặc dù mọi người lưu trữ dữ liệu nhị phân trong cơ sở dữ liệu, nhưng có lẽ mọi người thường lưu trữ tệp trong hệ thống tệp hoặc trong bộ lưu trữ đối tượng (chẳng hạn như Amazon S3). Sau đó, họ sẽ chỉ lưu trữ một liên kết đến tệp đó trong cơ sở dữ liệu và truy xuất tệp đó bằng liên kết. Bạn có thể làm bất cứ điều gì bạn cảm thấy thoải mái hơn.