[Catalyst] Setting file handle as the response body generates warnings.

Craig Chant craig at homeloanpartnership.com
Tue Nov 26 09:13:27 GMT 2013


I've been using this for while....

    # check for ok status
    if($result->ok)
    {

        # output header
        $c->response->content_type('application/vnd.ms-excel');
        $c->response->content_length(length($xls));
        $c->response->header(Content_Disposition => 'attachment;filename=NBCS_Export.csv');

        # create an IO::File for Catalyst
        use IO::File;
        my $iof = IO::File->new;

        # open XLS
        $iof->open(\$xls, "r");

        # output XLS data
        $c->response->body($iof);

        # close file
        undef $iof;
    }

It resolves the out of memory issue if you try to print direct to $c->response->body without putting the content in an IO::File object.


From: John Napiorkowski [mailto:jjn1056 at yahoo.com]
Sent: 26 November 2013 01:54
To: The elegant MVC web framework
Subject: Re: [Catalyst] Setting file handle as the response body generates warnings.

We should probably document what it means by $c->response->body can accept a file handle.  Like plack specifies the interface it must deal with.  Anyone up to that?

This FH in body thing is something I've been thinking about a lot lately, in regards to when Catalyst is running under an event loop for example, should Catalyst stream the Filehandle a non blocking manner.  But it would be great to document this.  Also, I am thinking setting the default size when its missing could really belong to middleware.  Plack has some default middleware that does this:

https://metacpan.org/source/MIYAGAWA/Plack-1.0030/lib/Plack/Middleware/ContentLength.pm

the means it works looks like this

https://metacpan.org/source/MIYAGAWA/Plack-1.0030/lib/Plack/Util.pm#L68

There's a few things in Catalyst.pm that could profitable just use Plack::Middleware counterparts.

just a thought.

johnnap

On Thursday, November 21, 2013 9:20 AM, neil.lunn <neil at mylunn.id.au<mailto:neil at mylunn.id.au>> wrote:
On 22/11/2013 12:33 AM, Bill Moseley wrote:


On Wed, Nov 20, 2013 at 11:32 PM, neil.lunn <neil at mylunn.id.au<mailto:neil at mylunn.id.au>> wrote:

This approach may work for you is the compressed data is actually in a scalar and not too large. And not too small. YMMV.

my $z = read_file "product.json.gz";

my $io = IO::Scalar->new( \$z );
$io->seek( -4, 2 );
$io->read( my $buf, 4);

my $uncompressed_size = unpack( 'V', $buf );


This indeed does work in my tests.   Thanks for all the help, Neil.   I really appreciate the time you spent on this.

No prob. Part of my thing on list reponses is that there is a seed for others to learn from what was discussed.
I do wonder if there is a sane way to test for an in memory file handle and give a more appropriate warning, but that is for further discussion.



--
Bill Moseley
moseley at hank.org<mailto:moseley at hank.org>



_______________________________________________

List: Catalyst at lists.scsys.co.uk<mailto:Catalyst at lists.scsys.co.uk>

Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst

Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/

Dev site: http://dev.catalyst.perl.org/




________________________________
[http://static.avast.com/emails/avast-mail-stamp.png]<http://www.avast.com/>

This email is free from viruses and malware because avast! Antivirus<http://www.avast.com/> protection is active.



_______________________________________________
List: Catalyst at lists.scsys.co.uk<mailto:Catalyst at lists.scsys.co.uk>
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/

This Email and any attachments contain confidential information and is intended solely for the individual to whom it is addressed. If this Email has been misdirected, please notify the author as soon as possible. If you are not the intended recipient you must not disclose, distribute, copy, print or rely on any of the information contained, and all copies must be deleted immediately. Whilst we take reasonable steps to try to identify any software viruses, any attachments to this e-mail may nevertheless contain viruses, which our anti-virus software has failed to identify. You should therefore carry out your own anti-virus checks before opening any documents. HomeLoan Partnership will not accept any liability for damage caused by computer viruses emanating from any attachment or other document supplied with this e-mail. HomeLoan Partnership reserves the right to monitor and archive all e-mail communications through its network. No representative or employee of HomeLoan Partnership has the authority to enter into any contract on behalf of HomeLoan Partnership by email. HomeLoan Partnership is a trading name of H L Partnership Limited, registered in England and Wales with Registration Number 5011722. Registered office: Pharos House, 67 High Street, Worthing, West Sussex, BN11 1DN. H L Partnership Limited is authorised and regulated by the Financial Conduct Authority.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.scsys.co.uk/pipermail/catalyst/attachments/20131126/94ed71aa/attachment.htm


More information about the Catalyst mailing list