/** * 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); }
/** * 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(); }