我们总是在注意错过太多,却不注意自己拥有多少。
一、本地目录结构
data //MongoDB数据库用于存储内容的文件夹
img.jpg //用做演示的图片资源
upload.js //上传文件到数据库的脚本
download.js //从数据库下载文件到本地的脚本
二、upload.js文件
const fs = require('fs');
const mongodb = require('mongodb');
const assert = require('assert'); // 断言(用于判断代码错误)
const MongoClient = mongodb.MongoClient;
// 定义需要连接的数据库地址
const url = 'mongodb://localhost:27017';
// 定义数据库名称
const dbName = 'test';
// 创建一个MongoClient useUnifiedTopology参数用来解决MongoDB的版本兼容问题
const client = new MongoClient(url, {useUnifiedTopology: true});
// 连接到数据库
client.connect(err => {
assert.ifError(err);
console.log('Connected successful to server');
// 切换到数据库test
const db = client.db(dbName);
// 在db数据库中创建一个GridFSBucket
var bucket = new mongodb.GridFSBucket(db, {
chunkSizeBytes: 1024, // 定义每个chunk块的最大字节大小, 默认为 255*1024B -> 255KB
bucketName: 'my-img' // 定义数据库中collection的名称, 默认为fs
});
// 通过GridFS上传文件到数据库
fs.createReadStream('./img.jpg').
pipe(bucket.openUploadStream('img.jpg')).
on('error', error => {
assert.ifError(error);
}).on('finish', res => {
console.log('done!', res);
process.exit(0);
});
});
三、download.js文件
const fs = require('fs');
const mongodb = require('mongodb');
const assert = require('assert');
const MongoClient = mongodb.MongoClient;
// 定义数据库连接地址
const url = 'mongodb://localhost:27017';
// 定义需要连接的数据库
const dbName = 'test';
// 创建一个MongoClient
const client = new MongoClient(url, { useUnifiedTopology: true });
// 连接数据库
client.connect(err => {
assert.ifError(err);
console.log('Connected successful to server');
// 切换到test数据库中
const db = client.db(dbName);
// 在test数据库中创建一个GirdFSBucket
const bucket = new mongodb.GridFSBucket(db, {
chunkSizeBytes: 1024,
bucketName: 'my-img'
});
// 读取数据库中使用GirdFSBucket存储的数据
bucket.openDownloadStreamByName('img.jpg').
pipe(fs.createWriteStream('output.jpg')).
on('error', error => {
assert.ifError(error);
}).
on('finish', () => {
console.log('done!');
process.exit(0);
});
});
四、运行说明
项目代码已经部署到码云上面,使用以下命令运行项目
git clone https://gitee.com/skyhro/Use_GirdFS_storage_resource.git
cd Use_GirdFS_storage_resource
npm i 安装依赖
npm run mongod 将数据库文件指定存储在data文件夹下(非必须命令)
npm run upload 或 node upload 上传文件
npm run download 或 node download 下载文件