/**
  * media.
  *
  * @param \Illuminate\Http\Request                      $request
  * @param \Illuminate\Filesystem\Filesystem             $filesystem
  * @param \Illuminate\Contracts\Routing\ResponseFactory $request
  * @param string                                        $file
  *
  * @return \Illuminate\Http\Response
  */
 public function media(Request $request, Filesystem $filesystem, ResponseFactory $responseFactory, $file)
 {
     $filename = __DIR__ . '/../../../public/' . $file;
     $mimeType = strpos($filename, '.css') !== false ? 'text/css' : 'application/javascript';
     $lastModified = $filesystem->lastModified($filename);
     $eTag = sha1_file($filename);
     $headers = ['content-type' => $mimeType, 'last-modified' => date('D, d M Y H:i:s ', $lastModified) . 'GMT'];
     if (@strtotime($request->server('HTTP_IF_MODIFIED_SINCE')) === $lastModified || trim($request->server('HTTP_IF_NONE_MATCH'), '"') === $eTag) {
         $response = $responseFactory->make(null, 304, $headers);
     } else {
         $response = $responseFactory->stream(function () use($filename) {
             $out = fopen('php://output', 'wb');
             $file = fopen($filename, 'rb');
             stream_copy_to_stream($file, $out, filesize($filename));
             fclose($out);
             fclose($file);
         }, 200, $headers);
     }
     return $response->setEtag($eTag);
 }
Example #2
0
 /**
  * Rendering resource
  * 
  * @param  stream $content
  * @return Response
  */
 protected function renderResource($content)
 {
     $start = 0;
     $length = $this->headers['Content-Length'];
     $size = $length;
     $status = 200;
     if (false !== ($range = $this->request->server('HTTP_RANGE', false))) {
         list($param, $range) = explode('=', $range);
         if (strtolower(trim($param)) !== 'bytes') {
             abort(400);
         }
         list($from, $to) = explode('-', $range);
         if ($from === '') {
             $end = $size - 1;
             $start = $end - intval($from);
         } elseif ($to === '') {
             $start = intval($from);
             $end = $size - 1;
         } else {
             $start = intval($from);
             $end = intval($to);
         }
         $length = $end - $start + 1;
         $status = 206;
         $this->setHeaders('Content-Range', sprintf('bytes %d-%d/%d', $start, $end, $size));
     }
     $response = $this->responseFactory->stream(function () use($content, $start, $length) {
         fseek($content, $start, SEEK_SET);
         echo fread($content, $length);
         flush();
         exit;
     }, $status, $this->getHeaders());
     // If there's a session we should save it now
     if (Config::get('session.driver') !== '') {
         Session::save();
     }
     ob_end_clean();
     $response->send();
 }