2017-04-20 114 views
1

我使用PHP7,Laravel 5.4和jenssegers/laravel-mongodb(PECL包)。我需要使用GridFS的,它被包括到MongoDB的PECL包,所以我試圖讓GridFS的是這樣的:Laravel 5.4中的GridFS不起作用

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

但它引發異常:「調用未定義的方法的MongoDB \數據庫:: getGridFS ()」。 對此有何想法?

回答

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);