如何从Google Drive获取图片链接并使用GridFS上传到MongoDB?
实现方案说明
首先先澄清两个适用场景:如果你的需求只是存储Google Drive的图片访问链接,不需要把logo文件本身存在MongoDB,完全可以不用GridFS,直接在普通集合里加字段存链接就可以。如果你是希望把logo文件从Google Drive下载后存储到MongoDB中、由MongoDB直接提供文件访问能力,才需要用到GridFS,以下是两种情况的实现步骤:
场景1:仅存Google Drive链接到MongoDB(无需GridFS)
- 第一步:上传logo到Google Drive后,将对应文件的共享权限设置为「任何知道链接的人都可以查看」,拿到公开访问链接
- 第二步:在MongoDB中创建普通集合,比如命名为
site_logos,集合字段参考如下:
{ "_id": ObjectId("xxx"), "logo_name": "品牌主logo", "gdrv_access_url": "https://drive.google.com/xxx", "used_position": "首页顶部", "size": "200*80px", "status": "active" }
- 第三步:网站渲染时直接查询
site_logos集合中状态为启用的logo链接,插入到img标签的src属性即可
场景2:将Google Drive的logo文件存储到MongoDB GridFS中
GridFS是MongoDB用来存储超过16MB大小的大文件的机制,小体积的logo也可以用,实现步骤如下:
- 第一步:预处理Google Drive的logo文件
调用Google Drive的API下载你上传的logo文件到本地内存或者临时目录,注意要先完成Google Drive的API鉴权,拿到文件读取权限 - 第二步:初始化GridFS存储桶
以Node.js环境的Mongoose为例,初始化代码参考:
const mongoose = require('mongoose'); const { GridFSBucket } = require('mongodb'); // 先建立MongoDB连接 const conn = mongoose.createConnection('你的MongoDB连接串'); let gfsBucket; conn.once('open', () => { gfsBucket = new GridFSBucket(conn.db, { bucketName: 'logos' // 自定义GridFS存储桶名称 }); });
- 第三步:写入文件到GridFS
把从Google Drive下载的logo文件流写入GridFS,同时可以自定义存储的文件名、文件类型等元数据:
const fs = require('fs'); // 假设你已经把logo下载到本地的tempLogo.png路径 const readStream = fs.createReadStream('./tempLogo.png'); const uploadStream = gfsBucket.openUploadStream('主logo.png', { metadata: { source: 'google_drive', used_position: '首页顶部', upload_time: new Date() }, contentType: 'image/png' }); readStream.pipe(uploadStream); uploadStream.on('finish', () => { console.log('logo写入GridFS完成,文件ID为:', uploadStream.id); // 你可以把这个文件ID存到普通业务集合里,后续方便查询 });
- 第四步:网站端动态渲染logo
后端提供一个logo访问接口,根据文件ID从GridFS读取文件流返回给前端,前端直接把接口地址作为img的src即可,接口示例代码:
app.get('/logo/:id', (req, res) => { gfsBucket.openDownloadStream(mongoose.Types.ObjectId(req.params.id)) .pipe(res) .on('error', () => res.status(404).send('logo不存在')); });
小提示:如果你的logo体积都远小于16MB,也可以直接把logo转成Base64字符串存在普通集合的字段里,不需要用GridFS,性能反而更高。
内容的提问来源于stack exchange,提问作者Mahnoor Fatima
相关产品推荐
相关产品推荐

