Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hi all

I'm trying to list out the contents in a certain folder in a drop down menu. After selecting a file it has the ability to download that file. The menu gets displayed properly but the file doesn't get downloaded. Its displayed as text instead. I do understand this is an issue with the header but im really new to perl so unable to resolve this issue. Your help is much appreciated

#Declare Variables my $cgi = new CGI; my $filepath= "/opt/run/test/dump"; @array = `ls //opt/run/test/dump`; chomp @array; print $cgi->header ; if (!$cgi->param) { print $cgi->startform; print $cgi->h3('Download logs'); print $cgi->popup_menu(-name=>'selected_file', -values=>[@array]); print $cgi->br; print $cgi->submit(-value=>'Download file'); print $cgi->endform; } else { print $cgi->h3('Downloading '); $file = $cgi->param('selected_file'); print "<BLOCKQUOTE>\n"; print $file; print "</BLOCKQUOTE>\n"; print ("Content-Type:application/x-download\n"); print "Content-Disposition: attachment; filename=$file\n\n"; open FILE, "< $filepath/$file" or die "can't open $filepath/$file +: $!"; binmode FILE; local $/ = \10240; while (<FILE>){ print $_; } close FILE; } print $cgi->end_html; 1;

Replies are listed 'Best First'.
Re: Issue with downloading files
by Anonymous Monk on Mar 19, 2015 at 07:02 UTC

    Your problem is you aren't doing this

    my( $headers, $contents ) = DoStuff( $cgi ); print $headers, $contents;

    Each HTTP request is headers + contents, and so is each HTTP response

    When you have  if( $this ){ print $that } elsif( $that }{ print $other; } ... when you're mixing it all up, when you don't separate the things your program does into ThisPage() ThatPage() OtherPage(), you get confused and forget how HTTP wants to have things, headers + contents, not headers + headers

Re: Issue with downloading files
by Anonymous Monk on Mar 19, 2015 at 07:11 UTC
Re: Issue with downloading files
by Anonymous Monk on Mar 19, 2015 at 15:48 UTC

      It's fun watching Anonymous Monk talk himself through a problem.

      I do it all the time, having an audience is nice