From 8122b43ec2966a4b183a39b057f2f725b0a9ef37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Fri, 5 Mar 2021 13:56:37 +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 | 15 +++++++++++++-- HttpServer/Server.php | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/HttpServer/Http/Response.php b/HttpServer/Http/Response.php index 0c8cf171..38166d30 100644 --- a/HttpServer/Http/Response.php +++ b/HttpServer/Http/Response.php @@ -275,21 +275,32 @@ class Response extends HttpService * @param int $offset * @param int $limit */ - public function sendFile(string $path, $offset = 0, $limit = 1024000) + public function sendFile(string $path, $offset = 0, $limit = 1024000, $sleep = 0) { $open = fopen($path, 'r'); + $name = explode(DIRECTORY_SEPARATOR, $path); + $stat = fstat($open); $this->response->setHeader('Content-Length', $stat['size']); + $this->response->setHeader('Content-Type', 'application/octet-stream'); + $this->response->setHeader('Content-Disposition', ' attachment; filename="' . end($name) . '"'); + $this->response->setHeader('Content-Transfer-Encoding', 'binary'); + while ($file = fread($open, $limit)) { $this->response->write($file); fseek($open, $offset); - + if ($sleep > 0) { + sleep($sleep); + } if ($offset >= $stat['size']) { break; } $offset += $limit; } + + $this->response->end(); + $this->response = null; } diff --git a/HttpServer/Server.php b/HttpServer/Server.php index 54df5d4f..361818df 100644 --- a/HttpServer/Server.php +++ b/HttpServer/Server.php @@ -149,7 +149,7 @@ class Server extends HttpService Runtime::enableCoroutine(true, SWOOLE_HOOK_ALL ^ SWOOLE_HOOK_BLOCKING_FUNCTION); -// Coroutine::set(['enable_deadlock_check' => false]); + Coroutine::set(['enable_deadlock_check' => false]); return $baseServer->start(); }