我正在使用PHP7,Laravel 5.4和jenssegers / laravel-mongodb(PECL包)。我需要使用GridFS,它包含在MongoDB PECL包中,所以我试图像这样得到GridFS:
$gridfs = DB::connection('mongo')->getMongoDB()->getGridFS();
但它抛出异常:“调用未定义的方法MongoDB \ Database :: getGridFS()”。 对此有何想法?
答案 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);