@@ -42,14 +42,20 @@ class FileDownloadResponse implements ResponseInterface
42
42
*/
43
43
private $ x_type ;
44
44
45
+ /**
46
+ * @var string|null
47
+ */
48
+ private $ x_accel_redirect_to ;
49
+
45
50
/**
46
51
* @param string $file
47
52
* @param string $content_type
48
53
* @param bool $inline
49
54
* @param string $filename
50
55
* @param string|null $x_type
56
+ * @param string|null $x_accel_redirect_to
51
57
*/
52
- public function __construct ($ file , $ content_type , $ inline = false , $ filename = null , $ x_type = null )
58
+ public function __construct ($ file , $ content_type , $ inline = false , $ filename = null , $ x_type = null , $ x_accel_redirect_to = null )
53
59
{
54
60
if (!is_file ($ file )) {
55
61
throw new RuntimeException ('Download file not found ' );
@@ -60,14 +66,24 @@ public function __construct($file, $content_type, $inline = false, $filename = n
60
66
$ this ->inline = $ inline ;
61
67
$ this ->filename = $ filename ;
62
68
$ this ->x_type = $ x_type ;
69
+ $ this ->x_accel_redirect_to = $ x_accel_redirect_to ;
63
70
}
64
71
65
72
public function createPsrResponse ()
66
73
{
74
+ $ response = new Response ();
67
75
$ filename = $ this ->filename ?: basename ($ this ->file );
68
76
$ disposition = $ this ->inline ? 'inline ' : 'attachment ' ;
69
77
70
- $ response = new Response ();
78
+ if (!empty ($ this ->x_accel_redirect_to )) {
79
+ $ response = $ response
80
+ ->withHeader ('Content-Disposition ' , $ disposition . '; filename=" ' . $ filename . '" ' )
81
+ ->withHeader ('Content-Length ' , filesize ($ this ->file ))
82
+ ->withHeader ('X-Accel-Redirect ' , $ this ->x_accel_redirect_to . $ filename );
83
+
84
+ return $ response ;
85
+ }
86
+
71
87
$ stream = new Stream (fopen ($ this ->file , 'rb ' ));
72
88
73
89
/** @var Response $response */
0 commit comments