diff options
author | Damien Nozay <damien.nozay@gmail.com> | 2014-10-24 09:15:26 +0100 |
---|---|---|
committer | Gervase Markham <gerv@gerv.net> | 2014-10-24 09:15:26 +0100 |
commit | 55e8faeed19ff618483cb5803847bdba6c80c752 (patch) | |
tree | f464b10e91ee12e60f0b28a3b6f86a59d6a337e5 /attachment.cgi | |
parent | d4146c594381f3303bb06b02dbe94be69c1da538 (diff) | |
download | bugs-55e8faeed19ff618483cb5803847bdba6c80c752.tar bugs-55e8faeed19ff618483cb5803847bdba6c80c752.tar.gz bugs-55e8faeed19ff618483cb5803847bdba6c80c752.tar.bz2 bugs-55e8faeed19ff618483cb5803847bdba6c80c752.tar.xz bugs-55e8faeed19ff618483cb5803847bdba6c80c752.zip |
Bug 1073264 - allow attachment download to be offloaded to the webserver using X-SendFile or equivalent. r=gerv, a=glob.
Diffstat (limited to 'attachment.cgi')
-rwxr-xr-x | attachment.cgi | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/attachment.cgi b/attachment.cgi index 5db8f5909..61e6f58d8 100755 --- a/attachment.cgi +++ b/attachment.cgi @@ -26,6 +26,7 @@ use Bugzilla::Attachment::PatchReader; use Bugzilla::Token; use Encode qw(encode find_encoding); +use Cwd qw(realpath); # For most scripts we don't make $cgi and $template global variables. But # when preparing Bugzilla for mod_perl, this script used these @@ -361,9 +362,24 @@ sub view { } } } + my $sendfile_header = {}; + my $sendfile_param = Bugzilla->params->{'xsendfile_header'}; + if ($attachment->is_on_filesystem && $sendfile_param ne 'off') { + # attachment is on filesystem and Admin turned on feature. + # This means we can let webserver handle the request and stream the file + # for us. This is called the X-Sendfile feature. see bug 1073264. + my $attachment_path = realpath($attachment->_get_local_filename()); + $sendfile_header->{$sendfile_param} = $attachment_path; + } print $cgi->header(-type=>"$contenttype; name=\"$filename\"", -content_disposition=> "$disposition; filename=\"$filename\"", - -content_length => $attachment->datasize); + -content_length => $attachment->datasize, + %$sendfile_header); + if ($attachment->is_on_filesystem && $sendfile_param ne 'off') { + # in case of X-Sendfile, we do not print the data. + # that is handled directly by the webserver. + return; + } disable_utf8(); print $attachment->data; } |