Ejemplo n.º 1
0
 /**
  * {@inheritdoc}
  */
 public function prepare(Request $request)
 {
     $this->headers->set('Content-Length', $this->file->getSize());
     if (!$this->headers->has('Accept-Ranges')) {
         // Only accept ranges on safe HTTP methods
         $this->headers->set('Accept-Ranges', $request->isMethodSafe() ? 'bytes' : 'none');
     }
     if (!$this->headers->has('Content-Type')) {
         $this->headers->set('Content-Type', $this->file->getMimetype() ?: '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->getSize();
             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);
                 } elseif ($start !== 0 || $end !== $fileSize - 1) {
                     $this->maxlen = $end < $fileSize ? $end - $start + 1 : -1;
                     $this->offset = $start;
                     $this->setStatusCode(206);
                     $this->headers->set('Content-Range', sprintf('bytes %s-%s/%s', $start, $end, $fileSize));
                     $this->headers->set('Content-Length', $end - $start + 1);
                 }
             }
         }
     }
     return $this;
 }
Ejemplo n.º 2
0
 /**
  * Checks whether the method is safe or not.
  *
  * @return bool
  *
  * @api
  */
 public function isMethodSafe()
 {
     return parent::isMethodSafe();
 }