Title: GridFS Author: Dariusz Górecki --- You can use MongoDB GridFS feature to save big files within MongoDB collections. The first thing you need to do, it to define model for yours GridFS collection, see example: ~~~ [php] class Image extends EMongoGridFS { /** * This field is optional, but: * from PHP MongoDB driver manual: * * 'You should be able to use any files created by MongoGridFS with any other drivers, and vice versa. * However, some drivers expect that all metadata associated with a file be in a "metadata" field. * If you're going to be using other languages, it's a good idea to wrap info you might want them * to see in a "metadata" field.' * * @var array $metadata array of additional info/metadata about a file */ public $metadata = array(); // this method should return the collection name for storing files public function getCollectionName() { return 'images'; } // normal rules method, if you use metadata field, set it as a 'safe' attribute public function rules() { return array( array('filename, metadata','safe'), array('filename','required'), ); } /** * Just like normal ActiveRecord/EMongoDocument classes */ public static function model($className=__CLASS__) { return parent::model($className); } } ~~~ > [important] > Every EMongoGridFS has a special field "filename", that is mandatory! > [information] > `EMongoGridFS` has a feature that holds files in temporary folder, between operations, > it can be set on global level in EMongoDB class, by setting property `gridFStemporaryFolder` to some dirname, > or on model/object level by using `gridFStemporaryFolder()` setter This part of documentation is not yet complete, for now, follow usage examples: ~~~ [php] Yii::import('ext.YiiMongoDbSuite.examples.MongoImage'); //create a new image $image = new MongoImage(); $image->filename = '/var/www/myImage.JPG'; $image->metadata = array('value1'=>1, 'value2'=>2); $res = $image->save(); if($res !== true) echo 'error saving file'; //find image $image = MongoImage::model()->find(); if(!($image instanceof MongoImage)) echo 'error finding object'; //findall images $images = MongoImage::model()->findAll(); if(!is_array($images)) echo 'error on findall'; //delete images $image = MongoImage::model()->find(); if($image instanceof MongoImage) { $result = $image->delete(); if($result !== true) echo 'delete notok'; } else echo 'no image found to delete'; //deleteAll images $result = MongoImage::model()->deleteAll(); if(is_array($result)===true) { echo ' isarray'; if(isset($result['err']) === true ) echo ' error deleting images:'.$result['err']; else echo ' elements deleted:'.$result['n']; } //deletebyPk image $image = MongoImage::model()->find(); if($image instanceof MongoImage) { $result = MongoImage::model()->deleteByPk($image->_id); if($result !== true) echo 'error'; } else echo 'no image found to delete by pk'; //insert image and update $image = new MongoImage(); $image->filename = '/var/www/myImage.JPG'; $image->metadata = array('value1'=>1, 'value2'=>2); $res = $image->save(); $image->filename = '/var/www/myImageUpdated.JPG'; $image->metadata = array('value1'=>3, 'value2'=>4); $res = $image->save(); if($res !== true) echo 'error updating'; //MongoGridFSFile functions $image = MongoImage::model()->find(); //getBytes function $bytes = $image->getBytes(); //getFilename $filename = $image->getFilename(); //getSize $size = $image->getSize(); //write $image->write(); ~~~