Steve,

I believe the best way would be to redirect the user to a page which has its
headers set to the appropriate MIME type. In a simple (non-C::A) CGI, you can
use the following line...

[ generate your file ] 

print header(-type => "text/comma-separated-values",
             -attachment => "download.csv");

Then print the data to the browser. 

For PDFs and ZIPs, I'm not sure if you can simply print, but let us know if
you succeed. Also, there are semi-mature PHP resources which work with
generated PDFs.

- JC


Steve Hay <[EMAIL PROTECTED]> wrote:

> Hi,
> 
> I'm trying to figure out a good way to download dynamically generated 
> files (mainly PDF files and ZIP files) using CGI-Application.
> 
> The user directs his browser at a CGI script, rather than a static PDF 
> file or ZIP file, and that script generates the file in question based 
> on various input variables and then downloads it to the client.
> 
> At the moment, the only way I can see to do this with CGI-Application is 
> to read the whole generated file into a scalar variable, and return (a 
> reference to) that from the run-mode.  This is highly undesirable since 
> the files in question could be very large.
> 
> What I think I want is for CGI-Application to support run-modes 
> returning some kind of valid filehandle (GLOB reference or IO::Handle).  
> CGI::Application->run() would then read (in small chunks at a time) data 
> from the returned filehandle and output it.  The attached patch (against 
> version 3.1) is a quick stab at this.  It would need polishing up, but 
> basically works OK as a demonstration of what I'm after.
> 
> The following simple module (together with the obvious CGI script) shows 
> it in action (albeit on a static file, rather than a dynamically 
> generated one):
> 
> ==========
> package MyDownloader;
> use CGI::Application;
> our @ISA = qw(CGI::Application);
> 
> sub setup {
>     my $self = shift;
>     $self->run_modes(['download']);
>     $self->start_mode('download');
> }
> 
> sub download {
>     my $self = shift;
>     my $type = 'image/gif';
>     my $file = 'C:\\Temp\\downloadee.gif';
>     $self->header_props(-type => $type);
>     open FH, $file;
>     return \*FH;
> }
> 
> 1;
> ==========
> 
> What are your thoughts on this?
> 
> Or is there a better way to do what I'm trying to achieve here?
> 
> Cheers,
> - Steve
> 




---------------------------------------------------------------------
Web Archive:  http://www.mail-archive.com/[EMAIL PROTECTED]/
              http://marc.theaimsgroup.com/?l=cgiapp&r=1&w=2
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to