Skip to content

Commit f7f33af

Browse files
committed
added Response::sendAsFile()
1 parent e6fbef6 commit f7f33af

2 files changed

Lines changed: 51 additions & 0 deletions

File tree

src/Http/Response.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,22 @@ public function setContentType(string $type, string $charset = null)
138138
}
139139

140140

141+
/**
142+
* Response should be downloaded with 'Save as' dialog.
143+
* @return static
144+
* @throws Nette\InvalidStateException if HTTP headers have been sent
145+
*/
146+
public function sendAsFile(string $fileName)
147+
{
148+
$this->setHeader(
149+
'Content-Disposition',
150+
'attachment; filename="' . str_replace('"', '', $fileName) . '"; '
151+
. "filename*=utf-8''" . rawurlencode($fileName)
152+
);
153+
return $this;
154+
}
155+
156+
141157
/**
142158
* Redirects to another URL. Don't forget to quit the script then.
143159
* @throws Nette\InvalidStateException if HTTP headers have been sent
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
/**
4+
* Test: Nette\Http\Response::sendAsFile().
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
use Nette\Http;
10+
use Tester\Assert;
11+
12+
13+
require __DIR__ . '/../bootstrap.php';
14+
15+
if (PHP_SAPI === 'cli') {
16+
Tester\Environment::skip('Headers are not available in CLI');
17+
}
18+
19+
20+
$response = new Http\Response;
21+
22+
$old = headers_list();
23+
$response->sendAsFile('file.name');
24+
$headers = array_values(array_diff(headers_list(), $old));
25+
Assert::same([
26+
'Content-Disposition: attachment; filename="file.name"; filename*=utf-8\'\'file.name',
27+
], $headers);
28+
29+
30+
$old = headers_list();
31+
$response->sendAsFile('žluťoučký"\' name');
32+
$headers = array_values(array_diff(headers_list(), $old));
33+
Assert::same([
34+
'Content-Disposition: attachment; filename="žluťoučký\' name"; filename*=utf-8\'\'%C5%BElu%C5%A5ou%C4%8Dk%C3%BD%22%27%20name',
35+
], $headers);

0 commit comments

Comments
 (0)