PHP操作MongoDB GridFS 存储文件的详解

可以参考以下的完整攻略。

PHP操作MongoDB GridFS 存储文件的详解

什么是MongoDB GridFS

MongoDB GridFS是MongoDB数据库中的一种机制,用于存储大型二进制文件,如图片,音频和视频等文件。GridFS把大文件分成小的块并保存在MongoDB集合中,它使用两个集合来存储文件:fs.filesfs.chunks

  • fs.files集合:保存文件的元数据(metadata),如文件名,大小,上传日期和 MIME类型等。
  • fs.chunks集合:保存文件数据的具体块(chunk),一般每个块的大小为256KB,每个块都有对应的ID和数据。

GridFS还具备以下优点:

  • 支持复制和分片
  • 支持恢复和部分建立索引。
  • 可以从多个不同的MongoDB实例中存储文件(Sharding)

使用PHP操作MongoDB GridFS进行文件存储

首先,需要安装并启用MongoDB PHP驱动程序。可以通过以下命令来安装:

 pecl install mongodb

然后,在PHP中,可以使用官方MongoDB PHP库提供的GridFS类来进行文件存储。

  1. 连接MongoDB数据库
$client = new MongoDB\Client("mongodb://localhost:27017");
$database = $client->mydatabase;
  1. 获取GridFS集合
$gridFSBucket = $database->selectGridFSBucket();
  1. 存储文件
$stream = fopen('/path/to/my/file', 'r');
$gridFSBucket->uploadFromStream('myfile.txt', $stream, [
    'metadata' => ['key' => 'value'],
]);
fclose($stream);

这里的$stream是一个打开的文件流,它的第一个参数是要存储的文件名,第二个参数是文件流。如果需要向文件添加附加的元数据,可以在第三个参数中指定一个元数组。上传完成后,uploadFromStream()方法将返回上传的文件ID。

  1. 获取文件
$stream = $gridFSBucket->openDownloadStreamByName('myfile.txt');
echo stream_get_contents($stream);
fclose($stream);

这里的openDownloadStreamByName()方法将返回一个文件流,它可以读取指定文件的内容。stream_get_contents()函数可以读取整个文件流并返回其内容。需要注意的是,当使用完文件流后,需要关闭流以释放资源。

示例1:上传图片文件

下面的示例展示了如何使用PHP从Web表单中上传图像文件并将其存储在MongoDB GridFS中。

<!DOCTYPE html>
<html>
<head>
    <title>PHP Upload Image to MongoDB GridFS</title>
</head>
<body>
    <form method="post" enctype="multipart/form-data">
        Select image to upload:
        <input type="file" name="fileToUpload" id="fileToUpload">
        <input type="submit" value="Upload Image" name="submit">
    </form>
    <?php
    if (isset($_POST['submit'])) {
        if ($_FILES['fileToUpload']['error'] === UPLOAD_ERR_OK) {
            $tmpName = $_FILES['fileToUpload']['tmp_name'];
            $originalName = basename($_FILES['fileToUpload']['name']);
            $fileExt = pathinfo($originalName, PATHINFO_EXTENSION);
            $newFileName = uniqid() . '.' . $fileExt;

            $client = new MongoDB\Client("mongodb://localhost:27017");
            $database = $client->mydatabase;
            $gridFSBucket = $database->selectGridFSBucket();

            $stream = fopen($tmpName, 'r');
            $gridFSBucket->uploadFromStream($newFileName, $stream, [
                'metadata' => ['filename' => $originalName, 'filetype' => $_FILES['fileToUpload']['type']],
            ]);
            fclose($stream);

            echo '<p>Image uploaded successfully!</p>';
        } else {
            echo '<p>Error uploading image: ' . $_FILES['fileToUpload']['error'] . '</p>';
        }
    }
    ?>
</body>
</html>

这里的表单允许用户上传图像文件,它的处理由PHP文件完成。首先,PHP代码检测文件是否可用并处理文件名,然后使用uploadFromStream()方法将文件上传到MongoDB GridFS中。

示例2:上传视频文件

下面的示例展示了如何使用PHP从Web表单中上传视频文件并将其存储在MongoDB GridFS中。

<!DOCTYPE html>
<html>
<head>
    <title>PHP Upload Video to MongoDB GridFS</title>
</head>
<body>
    <form method="post" enctype="multipart/form-data">
        Select video to upload:
        <input type="file" name="fileToUpload" id="fileToUpload">
        <input type="submit" value="Upload Video" name="submit">
    </form>
    <?php
    if (isset($_POST['submit'])) {
        if ($_FILES['fileToUpload']['error'] === UPLOAD_ERR_OK) {
            $tmpName = $_FILES['fileToUpload']['tmp_name'];
            $originalName = basename($_FILES['fileToUpload']['name']);
            $fileExt = pathinfo($originalName, PATHINFO_EXTENSION);
            $newFileName = uniqid() . '.' . $fileExt;

            $client = new MongoDB\Client("mongodb://localhost:27017");
            $database = $client->mydatabase;
            $gridFSBucket = $database->selectGridFSBucket();

            $stream = fopen($tmpName, 'r');
            $gridFSBucket->uploadFromStream($newFileName, $stream, [
                'metadata' => ['filename' => $originalName, 'filetype' => $_FILES['fileToUpload']['type']],
            ]);
            fclose($stream);

            echo '<p>Video uploaded successfully!</p>';
        } else {
            echo '<p>Error uploading video: ' . $_FILES['fileToUpload']['error'] . '</p>';
        }
    }
    ?>
</body>
</html>

这里的示例与上面的上传图像的示例非常相似,因此不做过多解释。唯一的区别是处理的是视频文件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP操作MongoDB GridFS 存储文件的详解 - Python技术站

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

相关文章

  • Windows下MongoDb简单配置教程

    首先我们要明确一下,MongoDB是一种非关系型数据库,支持高性能、高可用性和可扩展性,比较适合存储大量的非结构化或半结构化数据,如文档、图像、音频、视频等。 下面我来详细讲解一下如何在Windows下进行MongoDB的简单配置: 步骤一:下载MongoDB 首先需要从MongoDB官网进行下载,地址如下:https://www.mongodb.com/d…

    MongoDB 2023年5月16日
    00
  • ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法

    下面是完整攻略: ThinkPHP like模糊查询 Like模糊查询在ThinkPHP中非常常用,可以根据关键字在数据库中查找所有符合要求的结果。 例如,我们要查找用户表中用户名中含有“admin”的记录,可以使用以下代码: $userModel = new UserModel(); $userList = $userModel->where(‘us…

    MongoDB 2023年5月16日
    00
  • MongoDB系列教程(七):MongoDb数据结构详解

    关于”MongoDB系列教程(七):MongoDB数据结构详解”,下面是一份完整的攻略,内容包括什么是数据结构、在MongoDB中如何使用各种数据结构、以及两个示例。 数据结构介绍 数据结构是一种存储和组织数据的方式。MongoDB中支持多种数据结构,这些数据结构包括: 数组(Array) 嵌套文档(Nested Document) 集合(Collectio…

    MongoDB 2023年5月16日
    00
  • SpringBoot整合MongoDB的实现步骤

    下面是SpringBoot整合MongoDB的实现步骤的完整攻略: 1. 添加MongoDB的依赖 在pom.xml文件中添加MongoDB的依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-…

    MongoDB 2023年5月16日
    00
  • MongoDB删除集合

    删除MongoDB中的集合可以使用db.collection.drop()方法。这个方法可以接收一个留给可选参数的布尔值,指定是否完成删除集合的同时也删除了它的索引。 下面是删除一个名为 ‘myColl’ 的集合的代码示例: db.myColl.drop() 如果需要强制删除操作,则可以使用{force:true}选项: db.myColl.drop({fo…

    MongoDB 2023年3月14日
    00
  • mongodb中按天进行聚合查询的实例教程

    下面是 “mongodb中按天进行聚合查询的实例教程” 的完整攻略,其中包括两条示例说明。 概述 MongoDB 是一个 document-oriented 的数据库,支持强大的聚合查询功能。聚合查询可以对文档进行筛选、排序、分组、计算等操作,比较适合统计和分析类的需求。在实际开发中经常需要按天、按小时等时间维度来聚合数据,本文将详细介绍如何在 MongoD…

    MongoDB 2023年5月16日
    00
  • docker的一些基本指令

    下面我将详细讲解关于Docker基本指令的攻略,包含两条示例说明。 Docker基本指令攻略 拉取Docker镜像 在使用Docker构建环境时,我们需要使用到Docker镜像,通常我们需要从Docker Hub上拉取需要使用的镜像。 docker pull 镜像名称 这里的镜像名称指的是在Docker Hub上对应的镜像名,例如,如果需要拉取Ubuntu的…

    MongoDB 2023年5月16日
    00
  • PHP库 查询Mongodb中的文档ID的方法

    要查询MongoDB中文档的ID,需要使用PHP的MongoDB扩展程序。以下是详细的攻略步骤: 步骤1:安装MongoDB扩展程序 在PHP中使用MongoDB扩展程序,需要先在服务器上安装MongoDB驱动程序和MongoDB扩展程序。可以通过如下命令来安装: pecl install mongodb 在安装完成之后,需要在PHP配置文件php.ini中…

    MongoDB 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部