Class yii\mongodb\file\Upload

Inheritanceyii\mongodb\file\Upload » yii\base\BaseObject
Available since extension's version2.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

Hide inherited 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

Hide inherited 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

Hide inherited properties

$chunkCount public property

File chunk counts.

public integer $chunkCount 0
$chunkSize public property

Chunk size in bytes.

public integer $chunkSize 261120
$collection public property

File collection to be used.

$document public property

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.
public array $document = []
$filename public property

Filename to be used for file storage.

public string $filename null
$length public property

Total upload length in bytes.

public integer $length 0

Method Details

Hide inherited methods

__destruct() public method

Destructor.

Makes sure abandoned upload is cancelled.

public void __destruct ( )

                public function __destruct()
{
    if (!$this->_isComplete) {
        $this->cancel();
    }
}

            
addContent() public method

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

            
addFile() public method

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

            
addStream() public method

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

            
cancel() public method

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

            
complete() public method

Completes upload.

public array complete ( )
return array

Saved document.

                public function complete()
{
    $this->flushBuffer(true);
    $document = $this->insertFile();
    $this->_isComplete = true;
    return $document;
}

            
init() public method

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