/** * To get stream associated with the given media resource. * * @param object $entity The media resource. * @param ResourceStreamInfo $resourceStreamInfo This will be null if media * resource is MLE, if media * resource is named * stream then will be the * ResourceStreamInfo instance * holding the details of * named stream. * * @return string|null */ public function getReadStream($entity, $resourceStreamInfo) { $requestETag = null; $checkETagForEquality = null; $this->_getETagFromHeaders($requestETag, $checkETagForEquality); $stream = null; try { $this->_saveContentTypeAndETag(); if (is_null($resourceStreamInfo)) { $this->_loadAndValidateStreamProvider(); $stream = $this->_streamProvider->getReadStream($entity, $requestETag, $checkETagForEquality, $this->_service->getOperationContext()); } else { $this->_loadAndValidateStreamProvider2(); $stream = $this->_streamProvider->getReadStream2($entity, $resourceStreamInfo, $requestETag, $checkETagForEquality, $this->_service->getOperationContext()); } $this->_verifyContentTypeOrETagModified('IDSSP::getReadStream'); } catch (ODataException $ex) { //Check for status code 304 (stream Not Modified) if ($ex->getStatusCode() == 304) { $eTag = $this->getStreamETag($entity, $resourceStreamInfo); if (!is_null($eTag)) { $this->_service->getHost()->setResponseETag($eTag); } } throw $ex; } if ($resourceStreamInfo == null) { // For default streams, we always expect getReadStream() // to return a non-null stream. if (is_null($stream)) { throw new InvalidOperationException(Messages::streamProviderWrapperInvalidStreamFromGetReadStream()); } } else { // For named streams, getReadStream() can return null to indicate // that the stream has not been created. if (is_null($stream)) { // 204 == no content $this->_service->getHost()->setResponseStatusCode(204); } } return $stream; }