MongoDB学习笔记之GridFS使用介绍

yizhihongxing

MongoDB学习笔记之GridFS使用介绍

什么是GridFS

GridFS 是 MongoDB 提供的一种协议,用于存储可扩展的大型二进制数据文件,例如图像、音频和视频文件。MongoDB 的文件系统使用两个集合来存储二进制文件,使之可以分批读取或者分片存储。

如何使用GridFS

  1. 创建GridFS对象

创建GridFSBucket对象时,必须指定数据库名称和集合名称,例如:

const { MongoClient } = require('mongodb');
const { GridFSBucket } = require('mongodb');

const uri = "mongodb+srv://<username>:<password>@cluster0.mongodb.net/test?retryWrites=true&w=majority";
const client = new MongoClient(uri);

async function run() {
    try {
        await client.connect();
        console.log("Connected correctly to server");

        const database = client.db('<database name>');
        const bucket = new GridFSBucket(database, { bucketName: '<bucket name>' });

    } catch (err) {
        console.log(err.stack);
    }

    // Close the connection to the MongoDB server
    await client.close();
}

run().catch(console.dir);

在该示例中,<username><password><database name><bucket name> 需要替换为实际值。

  1. 存储文件

使用openUploadStream方法上传文件,例如:

const { ObjectId } = require('mongodb');
const fs = require('fs');

// An error will be thrown if the file does not exist
const readableStream = fs.createReadStream('<path to file>');
const uploadStream = bucket.openUploadStream('<filename>');

// Store custom metadata with the file
const metadata = { owner: "username", readPrivilege: true };
uploadStream.on('finish', function() {
    console.log('File uploaded!')
    console.log(`File ID: ${uploadStream.id}`);
});

// Pipe the file data to the GridFS file object
readableStream.pipe(uploadStream);

在该示例中,<path to file><filename> 需要替换为实际值。上传文件时可以选择存储自定义的文件元数据(例如上传者信息等)。

  1. 下载文件

使用openDownloadStream方法下载文件,例如:

const downloadStream = bucket.openDownloadStream(ObjectId('<file ID>'));

// Pipe the file data to the response object
downloadStream.pipe(response);

在该示例中,<file ID> 需要替换为实际值。下载文件时可以将文件数据直接发送到响应对象,以便实现断点续传等功能。

示例说明

  1. 上传文件
const { MongoClient } = require('mongodb');
const { GridFSBucket } = require('mongodb');
const fs = require('fs');

const uri = "mongodb+srv://<username>:<password>@cluster0.mongodb.net/test?retryWrites=true&w=majority";
const client = new MongoClient(uri);

async function run() {
    try {
        await client.connect();
        console.log("Connected correctly to server");

        const database = client.db('<database name>');
        const bucket = new GridFSBucket(database, { bucketName: '<bucket name>' });

        const readableStream = fs.createReadStream('<path to file>');
        const uploadStream = bucket.openUploadStream('<filename>');

        const metadata = { owner: "username", readPrivilege: true };
        uploadStream.on('finish', function() {
            console.log('File uploaded!')
            console.log(`File ID: ${uploadStream.id}`);
        });

        readableStream.pipe(uploadStream);

    } catch (err) {
        console.log(err.stack);
    }

    await client.close();
}

run().catch(console.dir);

在该示例中,替换 <username><password><database name><bucket name><path to file><filename> 为实际值。运行该脚本后,将会上传指定路径下的文件到 GridFS,并打印出文件 ID。

  1. 下载文件
const { MongoClient } = require('mongodb');
const { GridFSBucket } = require('mongodb');
const fs = require('fs');

const uri = "mongodb+srv://<username>:<password>@cluster0.mongodb.net/test?retryWrites=true&w=majority";
const client = new MongoClient(uri);

async function run() {
    try {
        await client.connect();
        console.log("Connected correctly to server");

        const database = client.db('<database name>');
        const bucket = new GridFSBucket(database, { bucketName: '<bucket name>' });

        const downloadStream = bucket.openDownloadStream(ObjectId('<file ID>'));

        downloadStream.pipe(fs.createWriteStream('<path to output>'));

    } catch (err) {
        console.log(err.stack);
    }

    await client.close();
}

run().catch(console.dir);

在该示例中,替换 <username><password><database name><bucket name><file ID><path to output> 为实际值。运行该脚本后,将会下载指定 ID 的文件,并保存到指定路径下。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MongoDB学习笔记之GridFS使用介绍 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Django app配置多个数据库代码实例

    下面是Django app配置多个数据库代码实例的完整攻略: 1. 在Django项目的settings.py中添加数据库连接信息 在Django项目的settings.py中,我们可以配置多个数据库的连接信息。以下是一个例子: DATABASES = { ‘default’: { ‘ENGINE’: ‘django.db.backends.mysql’, …

    人工智能概论 2023年5月24日
    00
  • django filters实现数据过滤的示例代码

    来讲解一下使用django filters实现数据过滤的示例代码的攻略。 什么是django filters django filters是django框架的一个插件库,用于实现数据过滤,可以在django的view视图函数、模板中使用,十分实用。 它提供了很多数据过滤的方法和内置的一些数据过滤器,在我们查询和过滤数据时,可以大大提升开发效率。 django…

    人工智能概论 2023年5月25日
    00
  • 深入理解Java事务的原理与应用

    关于深入理解Java事务的原理与应用的攻略,我将从以下几个方面进行阐述: 1. 什么是事务? 事务是数据库管理中的概念,用于表示一系列的数据库操作,这些操作被视为整体,或者是原子操作。事务必须是满足ACID(原子性、一致性、隔离性以及持久性)的。 2. 事务的隔离级别 数据库中的事务隔离级别是指多个并发的事务之间的隔离程度,包括以下隔离级别: READ UN…

    人工智能概览 2023年5月25日
    00
  • 用vscode开发python的步骤详解

    下面是我为你详细讲解“用vscode开发python的步骤详解”的完整攻略: 用vscode开发Python的步骤详解 1. 下载安装VSCode 首先,你需要在官网(https://code.visualstudio.com/)下载并安装Visual Studio Code。安装过程中,你可以自行设置一些个性化选项(如语言、颜色主题等)。 2. 安装Pyt…

    人工智能概览 2023年5月25日
    00
  • SpringBoot中logback日志保存到mongoDB的方法

    下面是“SpringBoot中logback日志保存到mongoDB的方法”的完整攻略。 一、概述 Logback是SpringBoot中默认的日志框架,也是一个优秀的日志框架。Logback提供了很多有用的功能,例如日志级别控制、日志文件归档等等。但是,Logback默认只支持将日志输出到控制台和文件中,如果想将日志保存到MongoDB中,就需要进行一些配…

    人工智能概论 2023年5月25日
    00
  • win10更新1909提示错误代码0x80073701解决步骤

    下面是关于“win10更新1909提示错误代码0x80073701解决步骤”的完整攻略。 问题描述 在进行Win10系统更新到1909版本时,可能会遇到错误代码为0x80073701的问题,导致更新失败无法完成。 解决步骤 步骤一:使用系统文件检查工具 使用系统自带的文件检查工具可以扫描并修复系统中出现的一些文件损坏或缺失的问题。 在开始菜单中搜索“命令提示…

    人工智能概论 2023年5月25日
    00
  • Windows server 2016服务器基本设置

    下面是“Windows Server 2016 服务器基本设置”的完整攻略。 1. Windows Server 2016 安装设置 1.1 下载 Windows Server 2016 镜像文件,刻录成光盘或 USB 启动盘。 1.2 将光盘或 USB 启动盘插入需要安装 Windows Server 2016 的服务器电脑上。 1.3 按下电脑开机键,选…

    人工智能概览 2023年5月25日
    00
  • Django中外键ForeignKey介绍使用

    当我们在Django中定义模型时,我们可以使用外键(ForeignKey)来实现模型之间的关系。 一、什么是外键 外键是指一个表中的字段引用了另一个表的主键作为自己的值。 在Django中,外键是一个模型字段,用于关联另一个模型的主键,实现模型之间的关系。外键字段在数据库中存储的是被关联模型的主键值。 二、使用外键 在Django中,使用外键需要定义一个Fo…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部