From be944d27c902dc71bdf0246dc8cfe0137c4e43ea Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sven=20Sch=C3=B6ling?= Date: Fri, 12 Apr 2019 18:14:33 +0200 Subject: [PATCH] =?utf8?q?Controller::send=5Ffile=20schickt=20jetzt=20?= =?utf8?q?=C3=BCber=20client=5Fjs=20wenn=20ajax?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit (cherry picked from commit 0f16bc87b4804cf05cefb5ac1514c7f565cfbfbd) --- SL/Controller/Base.pm | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/SL/Controller/Base.pm b/SL/Controller/Base.pm index 8b02ce0d4..b8f53e96a 100644 --- a/SL/Controller/Base.pm +++ b/SL/Controller/Base.pm @@ -7,6 +7,7 @@ use parent qw(Rose::Object); use Carp; use IO::File; use List::Util qw(first); +use MIME::Base64; use SL::Request qw(flatten); use SL::MoreCommon qw(uri_encode); use SL::Presenter; @@ -156,16 +157,21 @@ sub send_file { my $attachment_name = $params{name} || (!ref($file_name_or_content) ? $file_name_or_content : ''); $attachment_name =~ s:.*//::g; - print $::form->create_http_response(content_type => $content_type, - content_disposition => 'attachment; filename="' . $attachment_name . '"', - content_length => $size); - - if (!ref $file_name_or_content) { - $::locale->with_raw_io(\*STDOUT, sub { print while <$file> }); - $file->close; - unlink $file_name_or_content if $params{unlink}; + if ($::request->is_ajax || $params{ajax}) { + my $octets = ref $file_name_or_content ? $file_name_or_content : \ do { local $/ = undef; <$file> }; + $self->js->save_file(MIME::Base64::encode_base64($$octets), $content_type, $size, $attachment_name)->render; } else { - $::locale->with_raw_io(\*STDOUT, sub { print $$file_name_or_content }); + print $::form->create_http_response(content_type => $content_type, + content_disposition => 'attachment; filename="' . $attachment_name . '"', + content_length => $size); + + if (!ref $file_name_or_content) { + $::locale->with_raw_io(\*STDOUT, sub { print while <$file> }); + $file->close; + unlink $file_name_or_content if $params{unlink}; + } else { + $::locale->with_raw_io(\*STDOUT, sub { print $$file_name_or_content }); + } } return 1; -- 2.20.1