Расширение поддерживает MongoGridFS с помощью классов из пространства имен "\yii\mongodb\file". Там вы найдете классы Collection, Query и ActiveRecord.
Вы можете загрузить файл с помощью \yii\mongodb\file\Upload:
$document = Yii::$app->mongodb->getFileCollection()->createUpload()
->addContent('Part 1')
->addContent('Part 2')
// ...
->complete();
Вы можете скачать файл с помощью \yii\mongodb\file\Download:
Yii::$app->mongodb->getFileCollection()->createDownload($document['_id'])->toFile('/path/to/file.dat');
Каждая строка, файла результата запроса, содержит ключ 'file' экземпляра \yii\mongodb\file\Download:
use yii\mongodb\file\Query;
$query = new Query();
$rows = $query->from('fs')
->limit(10)
->all();
foreach ($rows as $row) {
var_dump($row['file']); // вывод: "object(\yii\mongodb\file\Download)"
echo $row['file']->toString(); // содержание файла вывода
}
С помощью [\yii\mongodb\file\ActiveRecord]] вы можете манипулировать файлами используя свойство 'file':
use yii\mongodb\file\ActiveRecord;
class ImageFile extends ActiveRecord
{
//...
}
$record = new ImageFile();
$record->number = 15;
$record->file = '/path/to/some/file.jpg'; // локальная загрузка файла GridFS
$record->save();
$record = ImageFile::find()->where(['number' => 15])->one();
var_dump($record->file); // вывод: "object(\yii\mongodb\file\Download)"
echo $record->file->toString(); // содержание файла вывода
Вы также можете управлять файлами GridFS через регулярные потоки ресурсов PHP. Вам нужно будет зарегистрировать обертку потока предоставленную этим расширением - \yii\mongodb\file\StreamWrapper. Это может быть сделано с помощью \yii\mongodb\file\Connection::registerFileStreamWrapper(). После того как обертка потока зарегистрирована, вы можете открыть поток используя следующий формат:
'protocol://databaseName.fileCollectionPrefix?file_attribute=value'
Для примера:
Yii::$app->mongodb->registerFileStreamWrapper(); // register stream wrapper
// запись файла:
$resource = fopen('gridfs://mydatabase.fs?filename=new_file.txt', 'w');
fwrite($resource, 'some content');
// ...
fclose($resource);
// запись файла с несколькими полями:
$resource = fopen('gridfs://mydatabase.fs?filename=new_file.txt&number=17&status=active', 'w');
fwrite($resource, 'file number 17 with status "active"');
fclose($resource);
// чтение файла:
$resource = fopen('gridfs://mydatabase.fs?filename=my_file.txt', 'r');
$fileContent = stream_get_contents($resource);