[Catalyst] file upload ( multipart/form-data) CGI trouble

k t sixperl at gmail.com
Mon Aug 28 10:15:44 CEST 2006


hello  ml members. I have a problem.
The application that up-loads the file is made.  This application is
executed CGI.
It is possible to up-load it in the catalyst test
server(testapp_server.pl) without trouble.
However, the reaction disappears after it up-loads it when executing
it with CGI(Apache2.0).
Post can be done without trouble, except when it is multipart/form-data.

After it waits for a while, the following error messages.
error.log

[Mon Aug 28 16:29:01 2006] [error] [client **] [error] Caught
exception in testapp::Controller::Root->upload "Wrong Content-Length
value: 20992 at /usr/local/lib/perl5/site_perl/5.8.8/Catalyst.pm line
1565"

please help me.
catalyst version 5.7001
----------------------
httpd.conf
<VirtualHost **** >
    ServerName test.cgiserver
    DocumentRoot /home/testcgi/public_html/
    ErrorLog /home/testcgi/error.log
    CustomLog /home/testcgi/access.log combined env=!no_log
    <Directory "/home/testcgi/public_html">
        AddDefaultCharset off
        Options IncludesNoExec ExecCGI
        Order allow,deny
        allow from ALL
        AllowOverride Limit AuthConfig Fileinfo Indexes
        <Files testapp_cgi.pl>
                SetHandler cgi-script
        </Files>
    </Directory>
        Alias /testapp/ /home/testcgi/public_html/testapp/script/testapp_cgi.pl/
</VirtualHost>



testapp_cgi.pl


#!/usr/local/bin/perl -w

BEGIN { $ENV{CATALYST_ENGINE} ||= 'CGI' }

use strict;
use FindBin;
use lib "$FindBin::Bin/../lib";
use testapp;

testapp->run;

1;





catalyst testapp source

Root.pm
sub upload : Global {
  my ($self, $c) = @_;

  if ( my $upload = $c->request->upload('img1_file') ) {
    my $filename = $upload->filename;
    my $target   = "/home/testcgo/public_html/imgsrc/$filename";
    unless ( $upload->link_to($target) || $upload->copy_to($target) ) {
      die( "Failed to copy '$filename' to '$target': $!" );
    }
  }
  $c->stash->{template} = testapp->config->{template}->{test};
  $c->forward('testapp::View::TT');
}

sub formtest : Global {
  my ($self, $c) = @_;
  $c->stash->{template} = 'formtest.tmpl';
  $c->forward('testapp::View::TT');
}





formtest.tmpl

<html>
 <head>
  <meta http-equiv="content-type" content="text/html;charset=shift_jis">
  <title>Untitled Page</title>
 </head>

 <body bgcolor="#ffffff">
  <form action="/testapp/upload" method="post" enctype="multipart/form-data">
   <input type="file" name="img1_file" size="10"><input type="hidden"
name="file" value="mode"><input type="submit" name="submitButtonName">
  </form>
 </body>



More information about the Catalyst mailing list