Laravel 5.4中的GridFS不起作用

时间:2017-04-20 15:34:17

标签: php mongodb laravel-5.4

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

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

但它抛出异常:“调用未定义的方法MongoDB \ Database :: getGridFS()”。 对此有何想法?

1 个答案:

答案 0 :(得分:0)

如果您使用mongo-php-library 2.2驱动程序,则 getGridFS()方法不再存在,但您可以使用Bucket类将文档上载并下载到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);