From abdc68627ffdcd41cd531e7cf2fffafe6263716d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Tue, 10 Aug 2021 16:47:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HttpServer/Http/Response.php | 6 +++++- Server/Constrict/ResponseEmitter.php | 14 ++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/HttpServer/Http/Response.php b/HttpServer/Http/Response.php index 5bb92256..99e9d735 100644 --- a/HttpServer/Http/Response.php +++ b/HttpServer/Http/Response.php @@ -119,10 +119,14 @@ class Response extends HttpService implements ResponseInterface * @param bool $isChunk * @param int $limit * @return $this|Response + * @throws Exception */ public function sendFile(string $path, bool $isChunk = false, int $limit = 10240): static { $this->format = self::FILE; + if (!file_exists($path)) { + throw new Exception('File `' . $path . '` not exists.'); + } $this->endData = ['path' => $path, 'isChunk' => $isChunk, 'limit' => $limit]; return $this; } @@ -262,7 +266,7 @@ class Response extends HttpService implements ResponseInterface /** @var SResponse $response */ $response = Context::getContext('response'); if (!empty($response)) { - return $response->redirect($url,302); + return $response->redirect($url, 302); } return false; } diff --git a/Server/Constrict/ResponseEmitter.php b/Server/Constrict/ResponseEmitter.php index d3324b3b..a876196d 100644 --- a/Server/Constrict/ResponseEmitter.php +++ b/Server/Constrict/ResponseEmitter.php @@ -5,8 +5,6 @@ namespace Server\Constrict; use Exception; use HttpServer\Http\Formatter\FileFormatter; use Server\ResponseInterface; -use Snowflake\Abstracts\Config; -use Snowflake\Exception\ConfigException; /** @@ -38,6 +36,18 @@ class ResponseEmitter */ private function download(array $content, \Swoole\Http\Response $response) { + $explode = explode('/', $content['path']); + + $response->header('Pragma', 'public'); + $response->header('Expires', '0'); + $response->header('Cache-Control', 'must-revalidate, post-check=0, pre-check=0'); +// $response->header('Content-Type', 'application/force-download'); + $response->header('Content-Type', 'application/octet-stream'); +// $response->header('Content-Type', 'application/vnd.ms-excel'); +// $response->header('Content-Type', 'application/download'); + $response->header('Content-Disposition', 'attachment;filename=' . end($explode)); + $response->header('Content-Transfer-Encoding', 'binary'); + if ($content['isChunk'] === false) { $response->sendfile($content['path']); return;