public function putBlock($containerName = '', $blobName = '', $identifier = '', $contents = '', $leaseId = null)
    {
        Assertion::notEmpty($containerName, 'Container name is not specified');
        self::assertValidContainerName($containerName);
        Assertion::notEmpty($blobName, 'Blob name is not specified.');
        Assertion::notEmpty($identifier, 'Block identifier is not specified.');
        self::assertValidRootContainerBlobName($containerName, $blobName);

        if (strlen($contents) > self::MAX_BLOB_TRANSFER_SIZE) {
            throw new BlobException('Block size is too big.');
        }

        $headers = array();
        if (!is_null($leaseId)) {
            $headers['x-ms-lease-id'] = $leaseId;
        }

        $resourceName = self::createResourceName($containerName , $blobName);

        $response = $this->performRequest($resourceName, array('comp' => 'block', 'blockid' => base64_encode($identifier)), 'PUT', $headers, false, $contents, self::RESOURCE_BLOB, self::PERMISSION_WRITE);
        if ( ! $response->isSuccessful()) {
            throw new BlobException($this->getErrorMessage($response, 'Resource could not be accessed.'));
        }
    }