【问题标题】:Storing and downloading pdf files from mongoDB using Node.js使用 Node.js 从 mongoDB 存储和下载 pdf 文件
【发布时间】:2022-08-15 02:53:35
【问题描述】:
我正在使用 NodeJs、猫鼬、ejs
我希望用户能够将他的 CV(小于 16 MB)上传为 pdf 文件,然后管理员能够下载 pdf 或在网站上查看 CV。
我做了上传部分,我将这样的简历存储在数据库中(这可能是错误的方式):
cv: Object {
fileName: \"Test Results All in testing-homework.pdf\"
filePath: \"cvs\\1650985306448-.pdf\"
fileType: \"application/pdf\"
}
pdf文件上传后保存在\"/cvs\"文件夹中。
我正在寻找一种能够从数据库下载/查看 pdf 文件的方法。
标签:
node.js
mongodb
file-upload
【解决方案1】:
我会建议你使用来自 mongodb 的 GridFs。
参考:https://www.mongodb.com/docs/drivers/node/current/fundamentals/gridfs/
从数据库下载
bucket.openDownloadStreamByName('your_file_name').
pipe(fs.createWriteStream('./desired_name_of_output_file'));
在 MongoDB 中使用 GridFs 的一些基本上传和下载操作
const mongoUrl='mongodb://127.0.0.1:27017/db'
const mongodb = require('mongodb');
const fs = require('node:fs');
const client = new mongodb.MongoClient(mongoUrl)
const db = client.db('db');
使用用户定义的名称创建存储桶
const bucket = new mongodb.GridFSBucket(db,{bucketName:'name_of_bucket' });
上传到数据库
fs.createReadStream('./filename.pdf').
pipe(bucket.openUploadStream('filename', {
chunkSizeBytes: 1048576,
metadata: { field: 'filename', value: 'myValue' }
}))
寻找
const cursor = bucket.find({});
cursor.forEach(doc => console.log(doc));
删除
cursor.forEach(doc => bucket.delete(doc._id));