eZ\Bundle\EzPublishIOBundle\BinaryStreamResponse::prepare PHP Method

prepare() public method

public prepare ( Request $request )
$request Symfony\Component\HttpFoundation\Request
    public function prepare(Request $request)
    {
        $this->headers->set('Content-Length', $this->file->size);
        $this->headers->set('Accept-Ranges', 'bytes');
        $this->headers->set('Content-Transfer-Encoding', 'binary');
        if (!$this->headers->has('Content-Type')) {
            $this->headers->set('Content-Type', $this->ioService->getMimeType($this->file->id) ?: 'application/octet-stream');
        }
        if ('HTTP/1.0' != $request->server->get('SERVER_PROTOCOL')) {
            $this->setProtocolVersion('1.1');
        }
        $this->ensureIEOverSSLCompatibility($request);
        $this->offset = 0;
        $this->maxlen = -1;
        if ($request->headers->has('Range')) {
            // Process the range headers.
            if (!$request->headers->has('If-Range') || $this->getEtag() == $request->headers->get('If-Range')) {
                $range = $request->headers->get('Range');
                $fileSize = $this->file->size;
                list($start, $end) = explode('-', substr($range, 6), 2) + array(0);
                $end = '' === $end ? $fileSize - 1 : (int) $end;
                if ('' === $start) {
                    $start = $fileSize - $end;
                    $end = $fileSize - 1;
                } else {
                    $start = (int) $start;
                }
                if ($start <= $end) {
                    if ($start < 0 || $end > $fileSize - 1) {
                        $this->setStatusCode(416);
                        // HTTP_REQUESTED_RANGE_NOT_SATISFIABLE
                    } elseif ($start !== 0 || $end !== $fileSize - 1) {
                        $this->maxlen = $end < $fileSize ? $end - $start + 1 : -1;
                        $this->offset = $start;
                        $this->setStatusCode(206);
                        // HTTP_PARTIAL_CONTENT
                        $this->headers->set('Content-Range', sprintf('bytes %s-%s/%s', $start, $end, $fileSize));
                        $this->headers->set('Content-Length', $end - $start + 1);
                    }
                }
            }
        }
        return $this;
    }