DevX Home    Today's Headlines   Articles Archive   Tip Bank   Forums   

Results 1 to 3 of 3

Thread: CGI/perl to upload file from AJAX

  1. #1
    Join Date
    Feb 2009

    CGI/perl to upload file from AJAX

    Hi all,
    I have a problem using the upload method from CGI when the information is sent from ajax. (see code below)
    I am getting an undefined filehandle
    Perl error message:
    Use of uninitialized value in <HANDLE>
    I don't have problems retrieving the parameters from the ajax and creating the folder and the file (an empty one)(so permissions are ok).
    The problem is I cannot read from the filehandle.

    So, if I add contentType in ajax:
    contentType: "multipart/form-data",
    I am not getting into the CGI and I am getting this error from the server:
    Malformed multipart POST: data truncated
    Any suggestions how to solve this.
    Thanks for your time and help!

    html form

    HTML Code:
    <link rel="stylesheet" href="jquery.jgrowl.css" type="text/css"/>
    <!-- jQuery Library -->
    <script type="text/javascript" language="javascript" src="jquery-1.2.6.js"></script>
    <script type="text/javascript" language="javascript" src="jquery.jgrowl.js"></script>
    <script type="text/javascript" language="javascript" src="test_ajax.js"></script>
    <input type=file id=test>
    <div id=output></div>

    $(document).ready(function () {
          var info = $.trim($(this).val());
              type: "POST",
              url: "/cgi-bin/upload_and_check.cgi",
              data: "filename="+info+"&session_id=abc",
              success: function(msg){             		 
                alert("This is the message: " + msg);
                $.jGrowl(msg, { sticky: true });

    use warnings;
    use strict;
    use CGI;
    my $form = new CGI;
    print $form->header; #Print HTML header
    my $web_home = "$ENV{DOCUMENT_ROOT}/ajax";
    #Getting parametres from form
    my $session_id = $form->param("session_id"); 
    my $filename = $form->param("filename");
    #Create temp dir if doesn't exist yet
    umask 0000;  
    if ( !-e "$web_home/tmp/$session_id" ) {
        mkdir "$web_home/tmp/$session_id", 0777 
             or die "Problems creating temporary dir '$web_home/tmp/$session_id':  $!\n";
    #the upload() method to grab the file handle
    my $UPLOAD_FH = $form->upload("filename");
    my $newfilename = $session_id;
    open my $NEWFILE_FH, "+>", "$web_home/tmp/$session_id/$newfilename.txt" 
        or die "Problems creating file '$newfilename': $!";
    while ( <$UPLOAD_FH> ) {
    	print $NEWFILE_FH;
    close $NEWFILE_FH or die "I cannot close filehandle: $!";

  2. #2
    Join Date
    Feb 2009
    Finilly, I found a solution. Here, I am posting a really simple example using ajax and cgi/perl (server site) to upload files. No reload and no submit button.
    I hope it helps for others as example.

    <!--jquery should be included before any other js-->
    <script type="text/javascript" language="javascript" src="/simple_ajax_cgi_example/jquery-1.2.6.js"></script>
    <script type="text/javascript" language="javascript" src="/simple_ajax_cgi_example/simple_ajax_cgi_example.js"></script>
    <form action="/cgi-bin/simple_ajax_cgi_example.cgi" id="form1" name="form1" encType="multipart/form-data"  method="post" target="hidden_frame" >
    <input type="file" id="file" name="file" style="width:450">
    <!--<INPUT type="submit"  id="test" value="submit">-->
    <span id="msg"></span>
    <iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe>
    AJAX simple_ajax_cgi_example.js
    $(document).ready(function () {
        $("#file").change(function() {
    function callback(msg) {
    CGI/Perl simple_ajax_cgi_example.cgi
    use warnings;
    use strict;
    use CGI;
    my $form = new CGI;
    print $form->header; #Print HTML header. this is mandatory
    my $web_home = "$ENV{DOCUMENT_ROOT}/simple_ajax_cgi_example";
    my $UPLOAD_FH = $form->upload("file");
    my $newfilename = "new_file";
    umask 0000; #This is needed to ensure permission in new file
    open my $NEWFILE_FH, "+>", "$web_home/tmp/$newfilename.txt" 
        or die "Problems creating file '$newfilename': $!";
    while ( <$UPLOAD_FH> ) {
        print $NEWFILE_FH "$_";
    close $NEWFILE_FH or die "I cannot close filehandle: $!";
    ##this is the only way to send msg back to the client
    print "<script>parent.callback('upload file success')</script>";
    Last edited by flope004; 02-05-2009 at 06:36 PM.

  3. #3
    Join Date
    Apr 2007
    Sterling Heights, Michigan
    Thanks for coming back and posting your solution.

    Hopefully it will help others.

Similar Threads

  1. Replies: 0
    Last Post: 09-25-2006, 11:46 AM
  2. Replies: 0
    Last Post: 11-10-2005, 11:07 PM
  3. File upload help
    By Chris in forum ASP.NET
    Replies: 5
    Last Post: 09-01-2002, 07:46 AM
  4. How long before the next version??
    By _CAG in forum .NET
    Replies: 146
    Last Post: 08-12-2002, 10:40 PM
  5. NullPointerException when reading text file
    By Andrew McLellan in forum Java
    Replies: 3
    Last Post: 05-09-2001, 05:34 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
HTML5 Development Center
Latest Articles
Questions? Contact us.
Web Development
Latest Tips
Open Source

   Development Centers

   -- Android Development Center
   -- Cloud Development Project Center
   -- HTML5 Development Center
   -- Windows Mobile Development Center