什么是 gridfs-bucket
GridFS 是 MongoDB 的一种存储方式,可以用于存储超过 16M 的文件,是 NoSQL 数据库中非常有用的一种功能。而 gridfs-bucket 利用这一特性,为 Node.js 提供了一种方便的存储文件的方式。
gridfs-bucket 类似于传统的文件系统,有文件夹和文件两种对象。我们可以将文件存储在文件夹中,也支持文件夹的嵌套等操作,同时支持对文件的各种操作。
安装
npm install gridfs-bucket
使用
连接到 MongoDB
-- -------------------- ---- ------- ----- - ----------- - - ------------------ ----- - ------------ - - ------------------------ ------------------------------------------------ ------- ------- -- - -- ------- - -------------------- ------ - ---- - ------------------- ----- -- - ----------------- ----- ------ - --- ---------------- -- ---- - --
首先通过 MongoClient 连接 MongoDB,然后再创建 GridFSBucket 对象。
上传文件
-- -------------------- ---- ------- ----- -- - ------------- ----- ------ - ------------------------------- ----- ------------ - --------------------------- --------- ----------- ------------ ------------ -- ------------------------- ------------------------- -- -- - ------------------- --
这里我们创建了一个文件读取流,然后通过 GridFSBucket 的 createUploadStream 方法创建了一个可写流。将文件读取流通过 pipe 方法传递给可写流即可实现文件上传。
下载文件
const downloadStream = bucket.openDownloadStream('test.txt') const writeStream = fs.createWriteStream('test2.txt') downloadStream.pipe(writeStream) writeStream.on('finish', () => { console.log('下载完成') })
这里我们通过 GridFSBucket 的 openDownloadStream 方法打开一个可读流,然后将其传递给文件写入流即可实现文件下载。
获取文件信息
bucket.find({ filename: 'test.txt' }, { limit: 1 }) .toArray((error, files) => { if (error) { console.log('查询文件失败:', error) } else { console.log('文件信息:', files[0]) } })
我们可以通过调用 find 方法获得符合条件的所有文件信息,这里我们查询文件名为 test.txt 的文件信息。
删除文件
bucket.delete('test.txt', (error) => { if (error) { console.log('删除文件失败:', error) } else { console.log('删除成功') } })
我们可以通过调用 delete 方法删除文件,这里我们删除文件名为 test.txt 的文件。
注意事项
- 上传文件时需要先创建可写流,然后将文件读取流通过 pipe 方法传递给可写流。
- 下载文件时需要先打开可读流,然后将其传递给文件写入流。
- 删除文件时需要指定文件名。
总结
gridfs-bucket 是一个方便的控制 GridFS 的 npm 包,你可以用它轻松地实现文件的上传、下载和删除操作。不仅如此,利用 gridfs-bucket 你还可以轻松地进行文件夹的嵌套等操作。希望这篇文章能帮助你学习如何使用 gridfs-bucket。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600673defb81d47349e53b9d