Laravel 5.4 中的 GridFS 不工作

GridFS in Laravel 5.4 doesn't work

我正在使用 PHP7、Laravel 5.4 和 jenssegers/laravel-mongodb(PECL 包)。我需要使用 GridFS,它包含在 MongoDB PECL 包中,所以我正在尝试这样获取 GridFS:

$gridfs = DB::connection('mongo')->getMongoDB()->getGridFS();

但它抛出异常:"Call to undefined method MongoDB\Database::getGridFS()"。 知道这个吗?

如果您使用 mongo-php-library 2.2 驱动程序,getGridFS() 方法不再存在,但是您可以使用 Bucket class 进行上传和将文档下载到 mongodb 网格。您可以尝试以下方法:

//upload file
$bucket = \DB::connection('mongodb')->getMongoDB()->selectGridFSBucket();
$resource = fopen($file_path, "a+");
$file_id = $bucket->uploadFromStream($file_path, $resource);

//download file
$bucket = \DB::connection('mongodb')->getMongoDB()->selectGridFSBucket();
$file_metadata = $bucket->findOne(["_id" => $file_id]);
$path = $file_metadata->filename;

if(!file_exists($path)) {
    $downloadStream = $bucket->openDownloadStream($file_id);
    $stream = stream_get_contents($downloadStream, -1);
    $ifp = fopen($path, "a+");
    fwrite($ifp, $stream);
    fclose($ifp);
}

注意$file_id变量是一个ObjectId,如果是字符串值,需要转成ObjectId:$file_id = new \MongoDB\BSON\ObjectID($str_file_id);