<%attr> ajax => 1 <%once> my $logger = Log::Log4perl->get_logger('rbc.tools.get'); <%args> $file $content_type => undef <%init> use File::MimeInfo; use File::Basename; $file =~ s/___H___/#/g; $file =~ s/___A___/'/g; $file =~ s/___U___/&/g; my $orig_file = $file; $file = uri_unescape( $file ); my $mime_type = $content_type || mimetype($file); my $charset = $r->notes( 'CFG_charset' ) || 'UTF-8'; $logger->debug("get file $file, mime_type: $mime_type"); my $filename = basename( $file ); $filename = uri_unescape( $filename ); $m->autoflush('on'); $m->clear_buffer; my $filesize = -s $file; if ( $filename ne 'cover.jpg' ) { $r->content_type("$mime_type; charset=$charset"); $r->header_out('X-LIGHTTPD-send-file' => $file ); $r->header_out( 'Content-disposition' => ( "attachment; filename=\"$filename\"; size=$filesize; charset=$charset") ); $m->autoflush('on'); return; } $r->content_type("$mime_type; charset=$charset"); $r->header_out( 'Content-disposition' => ( "attachment; filename=\"$filename\"; size=$filesize; charset=$charset" ) ); binmode STDOUT; open my $fh => "$orig_file" or die "$!"; binmode $fh; while(read $fh, my $buffer, 8192) { $m->print($buffer); ## $fh=*STDOUT; ## syswrite($fh, $buffer, 8192); $m->clear_buffer; } close $fh; $m->abort(); return;