Class yii\mongodb\file\Upload
Inheritance | yii\mongodb\file\Upload » yii\base\BaseObject |
---|---|
Available since extension's version | 2.1 |
Source Code | https://github.com/yiisoft/yii2-mongodb/blob/master/src/file/Upload.php |
Upload represents the GridFS upload operation.
An Upload
object is usually created by calling yii\mongodb\file\Collection::createUpload().
Note: instance of this class is 'single use' only. Do not attempt to use same Upload
instance for
multiple file upload.
Usage example:
$document = Yii::$app->mongodb->getFileCollection()->createUpload()
->addContent('Part 1')
->addContent('Part 2')
// ...
->complete();
Public Properties
Property | Type | Description | Defined By |
---|---|---|---|
$chunkCount | integer | File chunk counts. | yii\mongodb\file\Upload |
$chunkSize | integer | Chunk size in bytes. | yii\mongodb\file\Upload |
$collection | yii\mongodb\file\Collection | File collection to be used. | yii\mongodb\file\Upload |
$document | array | Additional file document contents. | yii\mongodb\file\Upload |
$filename | string | Filename to be used for file storage. | yii\mongodb\file\Upload |
$length | integer | Total upload length in bytes. | yii\mongodb\file\Upload |
Public Methods
Method | Description | Defined By |
---|---|---|
__destruct() | Destructor. | yii\mongodb\file\Upload |
addContent() | Adds string content to the upload. | yii\mongodb\file\Upload |
addFile() | Adds a file content to the upload. | yii\mongodb\file\Upload |
addStream() | Adds stream content to the upload. | yii\mongodb\file\Upload |
cancel() | Cancels the upload. | yii\mongodb\file\Upload |
complete() | Completes upload. | yii\mongodb\file\Upload |
init() | yii\mongodb\file\Upload |
Property Details
File collection to be used.
Additional file document contents. Common GridFS columns:
- metadata: array, additional data associated with the file.
- aliases: array, an array of aliases.
- contentType: string, content type to be stored with the file.
Method Details
Destructor.
Makes sure abandoned upload is cancelled.
public void __destruct ( ) |
public function __destruct()
{
if (!$this->_isComplete) {
$this->cancel();
}
}
Adds string content to the upload.
This method can invoked several times before complete() is called.
public $this addContent ( $content ) | ||
$content | string |
Binary content. |
return | $this |
Self reference. |
---|
public function addContent($content)
{
$freeBufferLength = $this->chunkSize - StringHelper::byteLength($this->_buffer);
$contentLength = StringHelper::byteLength($content);
if ($contentLength > $freeBufferLength) {
$this->_buffer .= StringHelper::byteSubstr($content, 0, $freeBufferLength);
$this->flushBuffer(true);
return $this->addContent(StringHelper::byteSubstr($content, $freeBufferLength));
} else {
$this->_buffer .= $content;
$this->flushBuffer();
}
return $this;
}
Adds a file content to the upload.
This method can invoked several times before complete() is called.
public $this addFile ( $filename ) | ||
$filename | string |
Source file name. |
return | $this |
Self reference. |
---|
public function addFile($filename)
{
if ($this->filename === null) {
$this->filename = basename($filename);
}
$stream = fopen($filename, 'r');
if ($stream === false) {
throw new InvalidParamException("Unable to read file '{$filename}'");
}
return $this->addStream($stream);
}
Adds stream content to the upload.
This method can invoked several times before complete() is called.
public $this addStream ( $stream ) | ||
$stream | resource |
Data source stream. |
return | $this |
Self reference. |
---|
public function addStream($stream)
{
while (!feof($stream)) {
$freeBufferLength = $this->chunkSize - StringHelper::byteLength($this->_buffer);
$streamChunk = fread($stream, $freeBufferLength);
if ($streamChunk === false) {
break;
}
$this->_buffer .= $streamChunk;
$this->flushBuffer();
}
return $this;
}
Cancels the upload.
public void cancel ( ) |
public function cancel()
{
$this->_buffer = null;
$this->collection->getChunkCollection()->remove(['files_id' => $this->_documentId], ['limit' => 0]);
$this->collection->remove(['_id' => $this->_documentId], ['limit' => 1]);
$this->_isComplete = true;
}
Completes upload.
public array complete ( ) | ||
return | array |
Saved document. |
---|
public function complete()
{
$this->flushBuffer(true);
$document = $this->insertFile();
$this->_isComplete = true;
return $document;
}
public void init ( ) |
public function init()
{
$this->_hashContext = hash_init('md5');
if (isset($this->document['_id'])) {
if ($this->document['_id'] instanceof ObjectID) {
$this->_documentId = $this->document['_id'];
} else {
try {
$this->_documentId = new ObjectID($this->document['_id']);
} catch (InvalidArgumentException $e) {
// invalid id format
$this->_documentId = $this->document['_id'];
}
}
} else {
$this->_documentId = new ObjectID();
}
$this->collection->ensureIndexes();
}