mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2025-01-31 09:06:17 +00:00
Make CakeResponse::file() accept ranges even when download option is false.
This commit is contained in:
parent
4b5783c5fe
commit
090e85a5a4
2 changed files with 156 additions and 19 deletions
|
@ -1382,18 +1382,17 @@ class CakeResponse {
|
||||||
$name = $options['name'];
|
$name = $options['name'];
|
||||||
}
|
}
|
||||||
$this->download($name);
|
$this->download($name);
|
||||||
$this->header('Accept-Ranges', 'bytes');
|
|
||||||
$this->header('Content-Transfer-Encoding', 'binary');
|
$this->header('Content-Transfer-Encoding', 'binary');
|
||||||
|
}
|
||||||
|
|
||||||
$httpRange = env('HTTP_RANGE');
|
$this->header('Accept-Ranges', 'bytes');
|
||||||
if (isset($httpRange)) {
|
$httpRange = env('HTTP_RANGE');
|
||||||
$this->_fileRange($file, $httpRange);
|
if (isset($httpRange)) {
|
||||||
} else {
|
$this->_fileRange($file, $httpRange);
|
||||||
$this->header('Content-Length', $fileSize);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
$this->header('Content-Length', $fileSize);
|
$this->header('Content-Length', $fileSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->_clearBuffer();
|
$this->_clearBuffer();
|
||||||
$this->_file = $file;
|
$this->_file = $file;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1199,6 +1199,10 @@ class CakeResponseTest extends CakeTestCase {
|
||||||
->will($this->returnArgument(0));
|
->will($this->returnArgument(0));
|
||||||
|
|
||||||
$response->expects($this->at(1))
|
$response->expects($this->at(1))
|
||||||
|
->method('header')
|
||||||
|
->with('Accept-Ranges', 'bytes');
|
||||||
|
|
||||||
|
$response->expects($this->at(2))
|
||||||
->method('header')
|
->method('header')
|
||||||
->with('Content-Length', 38);
|
->with('Content-Length', 38);
|
||||||
|
|
||||||
|
@ -1249,11 +1253,11 @@ class CakeResponseTest extends CakeTestCase {
|
||||||
|
|
||||||
$response->expects($this->at(2))
|
$response->expects($this->at(2))
|
||||||
->method('header')
|
->method('header')
|
||||||
->with('Accept-Ranges', 'bytes');
|
->with('Content-Transfer-Encoding', 'binary');
|
||||||
|
|
||||||
$response->expects($this->at(3))
|
$response->expects($this->at(3))
|
||||||
->method('header')
|
->method('header')
|
||||||
->with('Content-Transfer-Encoding', 'binary');
|
->with('Accept-Ranges', 'bytes');
|
||||||
|
|
||||||
$response->expects($this->at(4))
|
$response->expects($this->at(4))
|
||||||
->method('header')
|
->method('header')
|
||||||
|
@ -1314,11 +1318,11 @@ class CakeResponseTest extends CakeTestCase {
|
||||||
|
|
||||||
$response->expects($this->at(3))
|
$response->expects($this->at(3))
|
||||||
->method('header')
|
->method('header')
|
||||||
->with('Accept-Ranges', 'bytes');
|
->with('Content-Transfer-Encoding', 'binary');
|
||||||
|
|
||||||
$response->expects($this->at(4))
|
$response->expects($this->at(4))
|
||||||
->method('header')
|
->method('header')
|
||||||
->with('Content-Transfer-Encoding', 'binary');
|
->with('Accept-Ranges', 'bytes');
|
||||||
|
|
||||||
$response->expects($this->at(5))
|
$response->expects($this->at(5))
|
||||||
->method('header')
|
->method('header')
|
||||||
|
@ -1378,11 +1382,11 @@ class CakeResponseTest extends CakeTestCase {
|
||||||
|
|
||||||
$response->expects($this->at(3))
|
$response->expects($this->at(3))
|
||||||
->method('header')
|
->method('header')
|
||||||
->with('Accept-Ranges', 'bytes');
|
->with('Content-Transfer-Encoding', 'binary');
|
||||||
|
|
||||||
$response->expects($this->at(4))
|
$response->expects($this->at(4))
|
||||||
->method('header')
|
->method('header')
|
||||||
->with('Content-Transfer-Encoding', 'binary');
|
->with('Accept-Ranges', 'bytes');
|
||||||
|
|
||||||
$response->expects($this->at(5))
|
$response->expects($this->at(5))
|
||||||
->method('header')
|
->method('header')
|
||||||
|
@ -1432,6 +1436,10 @@ class CakeResponseTest extends CakeTestCase {
|
||||||
->with('ini')
|
->with('ini')
|
||||||
->will($this->returnValue(false));
|
->will($this->returnValue(false));
|
||||||
|
|
||||||
|
$response->expects($this->at(1))
|
||||||
|
->method('header')
|
||||||
|
->with('Accept-Ranges', 'bytes');
|
||||||
|
|
||||||
$response->expects($this->never())
|
$response->expects($this->never())
|
||||||
->method('download');
|
->method('download');
|
||||||
|
|
||||||
|
@ -1584,11 +1592,11 @@ class CakeResponseTest extends CakeTestCase {
|
||||||
|
|
||||||
$response->expects($this->at(2))
|
$response->expects($this->at(2))
|
||||||
->method('header')
|
->method('header')
|
||||||
->with('Accept-Ranges', 'bytes');
|
->with('Content-Transfer-Encoding', 'binary');
|
||||||
|
|
||||||
$response->expects($this->at(3))
|
$response->expects($this->at(3))
|
||||||
->method('header')
|
->method('header')
|
||||||
->with('Content-Transfer-Encoding', 'binary');
|
->with('Accept-Ranges', 'bytes');
|
||||||
|
|
||||||
$response->expects($this->at(4))
|
$response->expects($this->at(4))
|
||||||
->method('header')
|
->method('header')
|
||||||
|
@ -1639,11 +1647,11 @@ class CakeResponseTest extends CakeTestCase {
|
||||||
|
|
||||||
$response->expects($this->at(2))
|
$response->expects($this->at(2))
|
||||||
->method('header')
|
->method('header')
|
||||||
->with('Accept-Ranges', 'bytes');
|
->with('Content-Transfer-Encoding', 'binary');
|
||||||
|
|
||||||
$response->expects($this->at(3))
|
$response->expects($this->at(3))
|
||||||
->method('header')
|
->method('header')
|
||||||
->with('Content-Transfer-Encoding', 'binary');
|
->with('Accept-Ranges', 'bytes');
|
||||||
|
|
||||||
$response->expects($this->at(4))
|
$response->expects($this->at(4))
|
||||||
->method('header')
|
->method('header')
|
||||||
|
@ -1694,11 +1702,11 @@ class CakeResponseTest extends CakeTestCase {
|
||||||
|
|
||||||
$response->expects($this->at(2))
|
$response->expects($this->at(2))
|
||||||
->method('header')
|
->method('header')
|
||||||
->with('Accept-Ranges', 'bytes');
|
->with('Content-Transfer-Encoding', 'binary');
|
||||||
|
|
||||||
$response->expects($this->at(3))
|
$response->expects($this->at(3))
|
||||||
->method('header')
|
->method('header')
|
||||||
->with('Content-Transfer-Encoding', 'binary');
|
->with('Accept-Ranges', 'bytes');
|
||||||
|
|
||||||
$response->expects($this->at(4))
|
$response->expects($this->at(4))
|
||||||
->method('header')
|
->method('header')
|
||||||
|
@ -1715,6 +1723,136 @@ class CakeResponseTest extends CakeTestCase {
|
||||||
$result = $response->send();
|
$result = $response->send();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* testFileRangeOffsetsNoDownload method
|
||||||
|
*
|
||||||
|
* @dataProvider rangeProvider
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testFileRangeOffsetsNoDownload($range, $length, $offsetResponse) {
|
||||||
|
$_SERVER['HTTP_RANGE'] = $range;
|
||||||
|
$response = $this->getMock('CakeResponse', array(
|
||||||
|
'header',
|
||||||
|
'type',
|
||||||
|
'_sendHeader',
|
||||||
|
'_isActive',
|
||||||
|
'_clearBuffer',
|
||||||
|
'_flushBuffer'
|
||||||
|
));
|
||||||
|
|
||||||
|
$response->expects($this->at(1))
|
||||||
|
->method('header')
|
||||||
|
->with('Accept-Ranges', 'bytes');
|
||||||
|
|
||||||
|
$response->expects($this->at(2))
|
||||||
|
->method('header')
|
||||||
|
->with(array(
|
||||||
|
'Content-Length' => $length,
|
||||||
|
'Content-Range' => $offsetResponse,
|
||||||
|
));
|
||||||
|
|
||||||
|
$response->expects($this->any())
|
||||||
|
->method('_isActive')
|
||||||
|
->will($this->returnValue(true));
|
||||||
|
|
||||||
|
$response->file(
|
||||||
|
CAKE . 'Test' . DS . 'test_app' . DS . 'Vendor' . DS . 'css' . DS . 'test_asset.css',
|
||||||
|
array('download' => false)
|
||||||
|
);
|
||||||
|
|
||||||
|
ob_start();
|
||||||
|
$result = $response->send();
|
||||||
|
ob_get_clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* testFileRangeNoDownload method
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testFileRangeNoDownload() {
|
||||||
|
$_SERVER['HTTP_RANGE'] = 'bytes=8-25';
|
||||||
|
$response = $this->getMock('CakeResponse', array(
|
||||||
|
'header',
|
||||||
|
'type',
|
||||||
|
'_sendHeader',
|
||||||
|
'_setContentType',
|
||||||
|
'_isActive',
|
||||||
|
'_clearBuffer',
|
||||||
|
'_flushBuffer'
|
||||||
|
));
|
||||||
|
|
||||||
|
$response->expects($this->exactly(1))
|
||||||
|
->method('type')
|
||||||
|
->with('css')
|
||||||
|
->will($this->returnArgument(0));
|
||||||
|
|
||||||
|
$response->expects($this->at(1))
|
||||||
|
->method('header')
|
||||||
|
->with('Accept-Ranges', 'bytes');
|
||||||
|
|
||||||
|
$response->expects($this->at(2))
|
||||||
|
->method('header')
|
||||||
|
->with(array(
|
||||||
|
'Content-Length' => 18,
|
||||||
|
'Content-Range' => 'bytes 8-25/38',
|
||||||
|
));
|
||||||
|
|
||||||
|
$response->expects($this->once())->method('_clearBuffer');
|
||||||
|
|
||||||
|
$response->expects($this->any())
|
||||||
|
->method('_isActive')
|
||||||
|
->will($this->returnValue(true));
|
||||||
|
|
||||||
|
$response->file(
|
||||||
|
CAKE . 'Test' . DS . 'test_app' . DS . 'Vendor' . DS . 'css' . DS . 'test_asset.css',
|
||||||
|
array('download' => false)
|
||||||
|
);
|
||||||
|
|
||||||
|
ob_start();
|
||||||
|
$result = $response->send();
|
||||||
|
$output = ob_get_clean();
|
||||||
|
$this->assertEquals(206, $response->statusCode());
|
||||||
|
$this->assertEquals("is the test asset ", $output);
|
||||||
|
$this->assertTrue($result !== false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* testFileRangeInvalidNoDownload method
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testFileRangeInvalidNoDownload() {
|
||||||
|
$_SERVER['HTTP_RANGE'] = 'bytes=30-2';
|
||||||
|
$response = $this->getMock('CakeResponse', array(
|
||||||
|
'header',
|
||||||
|
'type',
|
||||||
|
'_sendHeader',
|
||||||
|
'_setContentType',
|
||||||
|
'_isActive',
|
||||||
|
'_clearBuffer',
|
||||||
|
'_flushBuffer'
|
||||||
|
));
|
||||||
|
|
||||||
|
$response->expects($this->at(1))
|
||||||
|
->method('header')
|
||||||
|
->with('Accept-Ranges', 'bytes');
|
||||||
|
|
||||||
|
$response->expects($this->at(2))
|
||||||
|
->method('header')
|
||||||
|
->with(array(
|
||||||
|
'Content-Range' => 'bytes 0-37/38',
|
||||||
|
));
|
||||||
|
|
||||||
|
$response->file(
|
||||||
|
CAKE . 'Test' . DS . 'test_app' . DS . 'Vendor' . DS . 'css' . DS . 'test_asset.css',
|
||||||
|
array('download' => false)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(416, $response->statusCode());
|
||||||
|
$result = $response->send();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test the location method.
|
* Test the location method.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Add table
Reference in a new issue