mts88/mongogrid

MongoDB GridFS 的 Laravel 实现

1.1.0 2019-03-25 19:31 UTC

This package is auto-updated.

Last update: 2024-09-09 17:48:10 UTC


README

Latest Stable Version Total Downloads License

这个库旨在帮助Laravel 5中使用MongoDB的GridFS。 这个库扩展了原始的MongoDB GridFS Bucket for PHP,因此许多方法都与原始版本相同,其他方法则为了使用而简化。

注意

这不是Eloquent或其他类似库。它是一个简单的辅助库,方便在Laravel中使用GridFS。如果您正在寻找MongoDB的Eloquent模型,建议您使用jenssegers/laravel-mongodb

目录

安装

Laravel版本兼容性

要求

请确保您已安装MongoDB PHP驱动。您可以在https://php.ac.cn/manual/en/mongodb.installation.php找到安装说明。

安装

  1. 使用composer安装
composer require mts88/mongogrid
  1. 并在config/app.php中添加服务提供者
Mts88\MongoGrid\Providers\MongoGridServiceProvider,
  1. 您还可以通过向config/app.php中的别名数组添加以下内容来为MongoGrid库注册一个别名
'MongoGrid'       => Mts88\MongoGrid\Facades\MongoGrid,

配置

运行以下命令以发布包配置文件config/gridfs.php

php artisan vendor:publish

MongoDB连接

您可以使用config/gridfs.php中的内置配置,或者您可以使用config/database.php(与jenssegers/laravel-mongodb兼容)。

使用config/gridfs.php的连接

在配置文件config/gridfs.php中设置您的配置以连接到MongoDB

简单连接
    'db_config' => [
        'host'     => env('DB_HOST', 'localhost'),
        'port'     => env('DB_PORT', 27017),
        'database' => env('DB_DATABASE'),
        'username' => env('DB_USERNAME'),
        'password' => env('DB_PASSWORD'),
        'options'  => [
            'database' => 'admin' // sets the authentication database required by mongo 3
        ]
    ],
副本集连接

在您的.env文件中添加DB_REPLICA_SET属性,其值为副本集名称

    'db_config' => [
        'host'     => [
            [
                'address' => 'server1',
                'port'=> 27017
            ],
            [
                'address' => 'server2',
                'port' => 27017
            ],
        ],
        'database' => env('DB_DATABASE'),
        'username' => env('DB_USERNAME'),
        'password' => env('DB_PASSWORD'),
        'options'  => [
            'replicaSet' => env('DB_REPLICA_SET'),
            'database' => 'admin' // sets the authentication database required by mongo 3
        ]
    ],

使用config/database.php的连接

在配置文件config/gridfs.php中设置配置名称

'db_config' => env('DB_CONNECTION', 'mongodb'),

在配置文件config/database.php中设置您的配置以连接到MongoDB:并添加一个新的mongodb连接

简单连接
'mongodb' => [
    'driver'   => 'mongodb',
    'host'     => env('DB_HOST', 'localhost'),
    'port'     => env('DB_PORT', 27017),
    'database' => env('DB_DATABASE'),
    'username' => env('DB_USERNAME'),
    'password' => env('DB_PASSWORD'),
    'options'  => [
        'database' => 'admin' // sets the authentication database required by mongo 3
    ]
],
副本集连接

您可以使用以下配置连接到多个服务器或副本集

'mongodb' => [
    'driver'   => 'mongodb',
    'host'     => ['server1', 'server2'],
    'port'     => env('DB_PORT', 27017),
    'database' => env('DB_DATABASE'),
    'username' => env('DB_USERNAME'),
    'password' => env('DB_PASSWORD'),
    'options'  => [
		'replicaSet' => 'replicaSetName'
	]
],
DSN URL

或者,您可以使用MongoDB连接字符串

'mongodb' => [
    'driver'   => 'mongodb',
    'dsn' => env('DB_DSN'),
    'database' => env('DB_DATABASE'),
],

有关其URI格式的详细信息,请参阅MongoDB官方文档:https://docs.mongodb.com/manual/reference/connection-string/

存储桶配置

这是GridFS存储桶的配置

    'bucket'    =>  [
        'prefix'            =>  'fs',
        'chunkSizeBytes'    =>  261120,
        'readPreference'    =>  'primaryPreferred',
        'readConcern'       =>  'available',
    ],

有关更多详细信息,请参阅MongoDB GridFS Bucket

元数据

默认情况下,库将这些元数据添加到每个文档中

  • uuid;
  • created_at;
  • updated_at;
  • downloads;

config/gridfs.php文件中将false设置为不包含此信息。

    'add_meta'      =>  false,

临时存储

默认情况下,库使用local驱动将文件存储到MongoDB。您可以更改Storage的默认驱动程序。

    'storage'       =>  'local',

有关更多信息,请参阅Laravel文件存储

使用

存储桶前缀

默认情况下,MongoGrid使用config/gridfs.php中的前缀,但如果您愿意,您可以在运行时使用另一个自定义前缀

MongoGrid::prefix('myNewPrefix')->someCoolMethod();

存储文件

storeFile( $fileContent, $fileName, [ optional $metadata] )

使用内容、文件名和您的元数据(可选)存储文件。返回ObjectId

$fileName = 'differentName.jpg';
$fileContent = Storage::disk('local')->get('star-wars-logo.jpg');
$objectId = MongoGrid::storeFile($fileContent, $fileName);

// Or with your custom metadata

$fileName = 'differentName.jpg';
$fileContent = Storage::disk('local')->get('star-wars-logo.jpg');
$metadata = array(
	'father'	=>	'Anakin',
	'son'		=>	'Luke'
	);
$objectId = MongoGrid::storeFile($fileContent, $fileName, $metadata);

或者使用另一个前缀

$fileName = 'differentName.jpg';
$fileContent = Storage::disk('local')->get('star-wars-logo.jpg');
$objectId = MongoGrid::prefix('starWars')->storeFile($fileContent, $fileName);

// Or with your custom metadata

$fileName = 'differentName.jpg';
$fileContent = Storage::disk('local')->get('star-wars-logo.jpg');
$metadata = array(
	'father'	=>	'Anakin',
	'son'		=>	'Luke'
	);
$objectId = MongoGrid::prefix('starWars')->storeFile($fileContent, $fileName, $metadata);

获取文件

所有从GridFS获取文件的方法。 修订号定义如下

  • 0 = 原始存储文件
  • 1 = 第一次修订
  • 2 = 第二次修订
  • 等等…
  • -2 = 第二近的修订
  • -1 = 最新的修订

默认为-1(即最新修订)。修订仅在按文件名的方法上工作。

getFileContent( $source, [可选 $revision] )

您可以通过文件名或其ObjectId检索文件内容。您还可以使用文件修订。

$fileName = 'star-wars-logo.jpg';
$content = MongoGrid::getFileContent($fileName, '-1');

// Or by ObjectId

$objectId = new \MongoDB\BSON\ObjectId;
$content = MongoGrid::getFileContent($objectId);

getFile( $source )

您可以通过文件名或其ObjectId检索文件内容。返回文件集合的文档。

$fileName = 'star-wars-logo.jpg';
$document = MongoGrid::getFile($fileName);

// Or by ObjectId

$objectId = new \MongoDB\BSON\ObjectId;
$document = MongoGrid::getFile($objectId);

findOne( $query, [可选 $options] )

从选定的GridFS存储桶中查找与查询匹配的单个文档。

$objectId = new \MongoDB\BSON\ObjectId;
$document = MongoGrid::findOne([ '_id' => $objectId ]);

要了解有关$options的更多信息,请参阅MongoDB GridFS findOne

find( $query, [可选 $options] )

从选定的GridFS存储桶中查找与查询匹配的所有文档。

$objectId = new \MongoDB\BSON\ObjectId;
$document = MongoGrid::find([ '_id' => $objectId ]);

download( $source, string $path, [可选 $revision] )

将文件从GridFS下载到指定的路径

$objectId = new \MongoDB\BSON\ObjectId;
$path = 'your/awesome/path';
MongoGrid::download($objectId, $path);

//Or by filename

$fileName = 'star-wars-logo.jpg';
$path = 'your/awesome/path';
MongoGrid::download($fileName, $path, '-1');

注意:使用此方法下载文件将自动增加元数据的下载次数(仅当元数据处于活动状态时)。

辅助工具

rename( $_id, $newName )

重命名文件。

$objectId = new \MongoDB\BSON\ObjectId;
$newName = 'star-wars-amazing-logo.jpg';
MongoGrid::rename($objectId, $newName);

delete( $_id )

从集合中删除文件。

$objectId = new \MongoDB\BSON\ObjectId;
MongoGrid::delete($objectId);

getBucketName()

返回所选GridFS存储桶的集合块

$bucketName = MongoGrid::getBucketName();

getChunksCollection()

返回所选GridFS存储桶的名称

$collection = MongoGrid::getChunksCollection();

getChunkSizeBytes()

返回所选GridFS存储桶块的大小

$size = MongoGrid::getChunkSizeBytes();

getDatabaseName()

返回用于所选GridFS的数据库的名称

$databaseName = MongoGrid::getDatabaseName();

getFilesCollection()

返回所选GridFS存储桶的文件集合

$collection = MongoGrid::getFilesCollection();

drop()

删除所选GridFS的整个集合

MongoGrid::drop();

联系方式

如果您有任何问题或建议,请在GitHub上提交问题。

许可证

本仓库内容根据MIT许可证发布。