mts88 / mongogrid
MongoDB GridFS 的 Laravel 实现
Requires
- mongodb/mongodb: ^1.3.0
- ramsey/uuid: ^3.7.0
This package is auto-updated.
Last update: 2024-09-09 17:48:10 UTC
README
这个库旨在帮助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找到安装说明。
安装
- 使用composer安装
composer require mts88/mongogrid
- 并在
config/app.php
中添加服务提供者
Mts88\MongoGrid\Providers\MongoGridServiceProvider,
- 您还可以通过向
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许可证发布。