diff --git a/src/Symfony/Component/HttpFoundation/BinaryFileResponse.php b/src/Symfony/Component/HttpFoundation/BinaryFileResponse.php index 2cd105c3bb0f..1842256a3f01 100644 --- a/src/Symfony/Component/HttpFoundation/BinaryFileResponse.php +++ b/src/Symfony/Component/HttpFoundation/BinaryFileResponse.php @@ -201,9 +201,9 @@ public function setContentDisposition($disposition, $filename = '', $filenameFal */ public function prepare(Request $request) { - parent::prepare($request); - if ($this->isInformational() || $this->isEmpty()) { + parent::prepare($request); + $this->maxlen = 0; return $this; @@ -213,6 +213,8 @@ public function prepare(Request $request) $this->headers->set('Content-Type', $this->file->getMimeType() ?: 'application/octet-stream'); } + parent::prepare($request); + $this->offset = 0; $this->maxlen = -1; diff --git a/src/Symfony/Component/HttpFoundation/Tests/BinaryFileResponseTest.php b/src/Symfony/Component/HttpFoundation/Tests/BinaryFileResponseTest.php index 4e4ddbf4446e..4ca6dbedf23a 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/BinaryFileResponseTest.php +++ b/src/Symfony/Component/HttpFoundation/Tests/BinaryFileResponseTest.php @@ -388,6 +388,32 @@ public function testPrepareNotAddingContentTypeHeaderIfNoContentResponse() $this->assertFalse($response->headers->has('Content-Type')); } + public function testContentTypeIsCorrectlyDetected() + { + $response = new BinaryFileResponse(__DIR__.'/File/Fixtures/test.gif'); + + $request = Request::create('/'); + $response->prepare($request); + + $this->assertSame(200, $response->getStatusCode()); + $this->assertSame('image/gif', $response->headers->get('Content-Type')); + } + + public function testContentTypeIsNotGuessedWhenTheFileWasNotModified() + { + $response = new BinaryFileResponse(__DIR__.'/File/Fixtures/test.gif'); + $response->setAutoLastModified(); + + $request = Request::create('/'); + $request->headers->set('If-Modified-Since', $response->getLastModified()->format('D, d M Y H:i:s').' GMT'); + $isNotModified = $response->isNotModified($request); + $this->assertTrue($isNotModified); + $response->prepare($request); + + $this->assertSame(304, $response->getStatusCode()); + $this->assertFalse($response->headers->has('Content-Type')); + } + protected function provideResponse() { return new BinaryFileResponse(__DIR__.'/../README.md', 200, ['Content-Type' => 'application/octet-stream']);