MongoDB GridFS 学习笔记
什么是 GridFS?
GridFS 是 MongoDB 提供的一个用于存储大文件的协议。在传统的 MongoDB 中,文档的大小限制为 16 MB,而 GridFS 允许我们存储超过该限制的文件,例如视频、音频等。
GridFS 实现文件存储的方式是将文件分成多个块(chunk),存储到两个集合中:fs.files
和 fs.chunks
。fs.files
中存储了文件的元数据(如文件名、大小、上传日期等),而 fs.chunks
中存储了文件的实际内容块。
如何使用 GridFS?
安装 GridFS 驱动
安装 GridFS 驱动需要使用 npm 包管理器,具体命令如下:
Copy Codenpm install mongodb
连接数据库
在代码中连接 MongoDB 数据库的方法跟传统的 MongoDB 操作一样,不再赘述。
存储文件
下面的代码演示了如何将本地的文件存储到 GridFS 中:
javascriptCopy Codeconst fs = require('fs');
const mongodb = require('mongodb').MongoClient;
// 连接 MongoDB 数据库
mongodb.connect('mongodb://localhost:27017', { useNewUrlParser: true }, (err, client) => {
if (err) throw err;
const db = client.db('mydb');
// 读取本地文件
const filePath = '/path/to/file.ext';
const fileContent = fs.readFileSync(filePath);
// 在 GridFS 中存储文件
const bucket = new mongodb.GridFSBucket(db);
const uploadStream = bucket.openUploadStream('file.ext');
uploadStream.write(fileContent);
uploadStream.end();
console.log('文件上传成功');
});
下载文件
下面的代码演示了如何从 GridFS 中下载文件:
javascriptCopy Codeconst fs = require('fs');
const mongodb = require('mongodb').MongoClient;
// 连接 MongoDB 数据库
mongodb.connect('mongodb://localhost:27017', { useNewUrlParser: true }, (err, client) => {
if (err) throw err;
const db = client.db('mydb');
// 在 GridFS 中查找文件
const bucket = new mongodb.GridFSBucket(db);
const downloadStream = bucket.openDownloadStreamByName('file.ext');
// 将文件保存到本地
const filePath = '/path/to/file.ext';
const writeStream = fs.createWriteStream(filePath);
downloadStream.pipe(writeStream);
writeStream.on('close', () => {
console.log('文件下载成功');
});
});
示例:存储和下载图片
下面我们用一个简单的示例,演示如何使用 GridFS 存储和下载一张图片。
存储图片
javascriptCopy Codeconst fs = require('fs');
const mongodb = require('mongodb').MongoClient;
const path = require('path');
// 连接 MongoDB 数据库
mongodb.connect('mongodb://localhost:27017', { useNewUrlParser: true }, (err, client) => {
if (err) throw err;
const db = client.db('mydb');
// 读取本地图片文件
const filePath = path.join(__dirname, 'image.jpg');
const fileContent = fs.readFileSync(filePath);
// 在 GridFS 中存储图片
const bucket = new mongodb.GridFSBucket(db);
const uploadStream = bucket.openUploadStream('image.jpg');
uploadStream.write(fileContent);
uploadStream.end();
console.log('图片上传成功');
});
下载图片
javascriptCopy Codeconst fs = require('fs');
const mongodb = require('mongodb').MongoClient;
const path = require('path');
// 连接 MongoDB 数据库
mongodb.connect('mongodb://localhost:27017', { useNewUrlParser: true }, (err, client) => {
if (err) throw err;
const db = client.db('mydb');
// 在 GridFS 中查找图片
const bucket = new mongodb.GridFSBucket(db);
const downloadStream = bucket.openDownloadStreamByName('image.jpg');
// 将图片保存到本地
const filePath = path.join(__dirname, 'image_download.jpg');
const writeStream = fs.createWriteStream(filePath);
downloadStream.pipe(writeStream);
writeStream.on('close', () => {
console.log('图片下载成功');
});
});
总结
本文简单介绍了 MongoDB GridFS 的使用方法,并给出了一个存储和下载图片的示例。