图片是现代网站开发中不可或缺的一部分。然而,传统的文件存储方式不能快速地从服务器端加载和传送图片。解决方法是将图片直接存储在云端,例如 Amazon S3 和 Google Cloud Storage。
在这篇文章中,我们将探讨如何使用 multer-storage-gridfs
npm 包,将上传到 Node.js 服务器的图片存储在 MongoDB 中。
准备
- Node.js
- MongoDB
- Multer
- Multer-gridfs-storage
- Mongoose
安装
在 Node.js
项目目录中使用 npm
安装 multer-storage-gridfs
:
$ npm install multer-storage-gridfs
使用方法
使用 multer-storage-gridfs
,首先需要创建一个新的 GridFsStorage
实例:
-- -------------------- ---- ------- ----- ------------- - --------------------------------- ----- ------- - --- --------------- ---- ---------------------------------- ----- ----- ----- -- - ------ - --------- ------------------ ----------- --------- -- - ---
可以通过一些可选的配置参数组合更改默认设置,这些设置分别是:
-- -------------------- ---- ------- ----- ------- - --- --------------- ---- ---------------------------------- -------- - ---------------- ----- ------------------- ---- -- ----- ----- ----- -- - ----- ----- - ------------- -------------- -- ----------------------------- --- --- - ----- -------- - ---------------------------------------------- ------ --------- - ------ - ----------- --------- --------- --------------------------------------------- -- - ---
在这里,我们添加了一些新的配置项:
options
- 传递给 MongoDB 的参数file
- 函数返回一个包含filename
和bucketName
的对象。如果mimetype
不是'image/png'
或'image/jpeg'
,返回一个新的文件名。
接下来,将 storage
对象传递给 Multer
的 upload
方法:
const upload = multer({ storage });
最后,使用 upload
中间件在任何路由上启用文件上传:
app.post('/upload', upload.single('file'), (req, res) => { res.status(200).json('File uploaded successfully'); });
完整示例
-- -------------------- ---- ------- ----- ------- - ------------------- ----- -------- - -------------------- ----- ---- - ------------------------- ----- ------------- - --------------------------------- ----- ---------- - ----------------------- ----- ------ - ------------------ ----- --- - ---------- --------------------------- ------------------------------- --------- ---- ---- ----- ----- - ---------------------------------- -- -- ------- --- ----------------------- - ---------------- ----- ------------------- ---- --- --- ---- - -------------------- --- --- - ----- ----------------- -- -- - -- --- ------ -- --- - ------------- ---------------- -------------------------- --- ----- ------- - --- --------------- ---- ------ ----- ----- ----- -- - ------ - --------- ------------------ ----------- --------- -- - --- ----- ------ - -------- ------- --- ------------------- ---------------------- ----- ---- -- - -------------------------- -------- --------------- --- -------------------------- ----- ---- -- - ------------------- --------- ------------------- -- ----- ----- -- - -- ------ -- ----------- --- -- - ------ ---------------------- ---- --- ----- ------ --- - ----- ---------- - ------------------------------------ --------------------- --- --- ----- ---- - ---------------- -- ----- ---------------- -- -- - ---------------------- -- ---- ---------- ---
在上述完整示例中,我们可以使用 /upload
端点上传文件,使用 /file/:filename
端点获取已上传的文件。
总结
通过使用 multer-storage-gridfs
,我们可以将上传到 Node.js 服务器的文件存储到 MongoDB 中。在这篇文章中,我们介绍了如何通过使用 GridFsStorage
和 Multer
中间件上传和下载文件。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005725c81e8991b448e8875