Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re^3: Perl CGI to download files via web browser

by marto (Cardinal)
on Mar 08, 2013 at 14:10 UTC ( [id://1022429]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Perl CGI to download files via web browser
in thread Perl CGI to download files via web browser

One solution would be to load the file contents into memory and serve the content with the appropriate header. This of course depends on the size of the file, you don't want to load large files into memory and serve it like this. You could copy the file into a temporary web accessable area and provide a link to it.

Other things to consider, do you want to remove the converted file after you've sered it, so that you don't end up filling some filesystem with old files people have downloaded? Perhaps you'd need to write a housekeeping script to tidy up these files/areas on a regular basis. Clarify your requirements and consider the implications of your system. See also Print to Browser Headers Not Working Serve a file from a CGI script.

Replies are listed 'Best First'.
Re^4: Perl CGI to download files via web browser
by tanuj (Novice) on Mar 08, 2013 at 14:22 UTC
    i was trying with the below code:
    #!/usr/bin/perl #print "Content-type: text/html\n\n"; my $filepath='/upload/testing.pm'; print "Content-Type: text/html\n\n"; open("DOWNLOADFILE", "<".$filePath); while($fileContents = <DOWNLOADFILE>) { print $fileContents; } print "Content-Type: text\n"; print "Content-Disposition: attachement; filename='testing.pm'\n"; print "Content-Description: File to download\n\n"; close DOWNLOADFILE;

      Problem 1: You're printing two Content-Type headers. Solution: lose the first one.

      Problem 2: You're printing the content before the headers. Solution: swap them around.


      Update:

      Problem 3: The content type should probably be a full MIME type such as "text/plain".

        Thanks for suggesting the solution ...I got the script working ...
        use CGI; my $html= new CGI; my $file= $html->param('a'); my $filepath= "/var/www/upload/$file"; print ("Content-Type:application/x-download\n"); print "Content-Disposition: attachment; filename=$file\n\n"; open FILE, "< $filepath" or die "can't open : $!"; binmode FILE; local $/ = \10240; while (<FILE>){ print $_; } close FILE; #unlink ($filepath);

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1022429]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having an uproarious good time at the Monastery: (2)
As of 2024-03-19 06:53 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found