configure($response)->getContent(); if (!($content instanceof FileFormatter)) { $response->end($content->getData()); return; } $this->download($content->getData(), $response); } /** * @param array $content * @param \Swoole\Http\Response $response */ private function download(array $content, \Swoole\Http\Response $response) { if ($content['isChunk'] === false) { $response->sendfile($content['path']); return; } $resource = fopen($content['path'], 'r'); $state = fstat($resource); $offset = 0; $response->header('Content-length', $state['size']); while ($file = fread($resource, $content['limit'])) { $response->write($file); fseek($resource, $offset); if ($offset >= $state['size']) { break; } $offset += $content['limit']; } $response->end(); } }