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日

相关文章

  • MongoDB的安装及配置文件选项全解

    首先我们来讲解MongoDB的安装及配置文件选项全解。 MongoDB的安装及配置文件选项全解 MongoDB是一款面向文档的NoSQL数据库,相较于传统的关系型数据库,MongoDB更加适合处理海量数据和高并发读写操作。下面,我们将详细介绍在Windows系统下如何安装MongoDB,并讲解其配置文件选项的含义。 1. MongoDB的安装 1.1 下载M…

    MongoDB 2023年5月16日
    00
  • mongodb数据库游标的使用浅析

    MongoDB数据库游标的使用浅析 MongoDB是一种面向文档的分布式数据库,数据以键值对的形式存储。使用游标可以很好的处理大批量数据,本文将介绍如何使用游标。 MongoDB游标简介 MongoDB游标是一种遍历数据的方式,它在处理大批量数据时十分有效。在MongoDB中,我们使用find()方法查询数据,返回的是一个游标(cursor),而非数据本身。…

    MongoDB 2023年5月16日
    00
  • springboot整合mongodb

    下面我会提供一个完整的”springboot整合mongodb”攻略,同时包含两个示例说明供您参考。 准备工作 在开始代码实现之前,需要先安装好MongoDB和Java开发环境,以及导入所需的maven依赖。 MongoDB的安装:可以按照官方文档进行下载和安装,具体可以访问MongoDB官网。 Java开发环境的安装:可以选择Eclipse或者Intell…

    MongoDB 2023年5月16日
    00
  • MongoDB日志切割的三种方式总结

    MongoDB日志切割的三种方式总结 在MongoDB的使用过程中,日志占据了不可忽视的重要位置,对于MongoDB的性能调优和问题排查都是必不可少的。为了保证日志的可读性和不影响服务器的正常运行,我们经常需要对MongoDB的日志进行切割。下面将介绍MongoDB日志切割的三种常用方式。 1. 按日志大小切割 这种方式是最常用的一种切割方式,它可以将当前的…

    MongoDB 2023年5月16日
    00
  • 关于NoSQL之MongoDB的一些总结

    关于NoSQL之MongoDB的一些总结 什么是NoSQL? NoSQL是“Not only SQL”的缩写,表示非关系型数据库,它不像传统的关系型数据库(SQL)那样有严格的表结构和数据类型限制,相对灵活。 MongoDB是什么? MongoDB是一款比较流行的NoSQL数据库,它是一种文档存储数据库,可以存储各种复杂的文档类型,并且支持分布式部署。 Mo…

    MongoDB 2023年5月16日
    00
  • MongoDB的安装方法图文教程

    以下是关于“MongoDB的安装方法图文教程”的完整攻略。 安装MongoDB的前置条件 准备好安装包:MongoDB官网下载页面 确认系统是否支持MongoDB:MongoDB系统要求页面 在Windows系统上安装MongoDB 步骤1:下载并安装MongoDB 打开MongoDB官网下载页面,选择合适的版本进行下载。 如果还没有安装内置Git,这里是下…

    MongoDB 2023年5月16日
    00
  • Windows系统下安装MongoDB与Robomongo环境详解

    Windows系统下安装MongoDB与Robomongo环境详解 本篇攻略旨在详细介绍Windows系统下安装MongoDB与Robomongo环境。 安装MongoDB 下载MongoDB 首先需要从MongoDB官网上下载MongoDB的安装程序。地址:https://www.mongodb.com/download-center/community。…

    MongoDB 2023年5月16日
    00
  • ubuntu 16.04 LTS 安装mongodb 3.2.8教程

    下面是“ubuntu 16.04 LTS 安装mongodb 3.2.8教程”的完整攻略: 准备工作 首先,我们需要在Ubuntu 16.04 LTS系统中安装MongoDB 3.2.8之前,需要先确认系统是最新的版本,然后更新apt: sudo apt update && sudo apt upgrade -y 安装MongoDB 安装Mo…

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