DevX Home    Today's Headlines   Articles Archive   Tip Bank   Forums   

+ Reply to Thread
Results 1 to 3 of 3
  1. #1
    Join Date
    Feb 2009
    Posts
    2

    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:
    Code:
    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>
    AJAX

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

    Code:
    #!/usr/bin/perl
    
    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: $!";
    
    exit;

  2. #2
    Join Date
    Feb 2009
    Posts
    2
    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.

    HTML
    Code:
    <!--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>
    
    <html>
    <body>
    <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>
    <br>
           
    <iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe>
    </form>
    
    </body>
    </html>
    AJAX simple_ajax_cgi_example.js
    Code:
    $(document).ready(function () {
        $("#file").change(function() {
            $("#form1").submit();
        });
    });
    
    function callback(msg) {
        $("#msg").html(msg);
    }
    CGI/Perl simple_ajax_cgi_example.cgi
    Code:
    #!/usr/bin/perl
    
    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>";
    
    exit;
    Last edited by flope004; 02-05-2009 at 05:36 PM.

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

    Hopefully it will help others.
    I don't answer coding questions via PM or Email. Please post a thread in the appropriate forum section.
    Please use [Code]your code goes in here[/Code] tags when posting code.
    Before posting your question, did you look here?
    Got a question on Linux? Visit our Linux sister site.
    Modifications Required For VB6 Apps To Work On Vista

Similar Threads

  1. Replies: 0
    Last Post: 09-25-2006, 11:46 AM
  2. Replies: 0
    Last Post: 11-10-2005, 10: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

Bookmarks

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
 
 
FAQ
Latest Articles
Java
.NET
XML
Database
Enterprise
Questions? Contact us.
C++
Web Development
Wireless
Latest Tips
Open Source


Top DevX Stories

Easy Web Services with SQL Server 2005 HTTP Endpoints
JavaOne 2005: Java Platform Roadmap Focuses on Ease of Development, Sun Focuses on the "Free" in F.O.S.S.
Wed Yourself to UML with the Power of Associations
Microsoft to Add AJAX Capabilities to ASP.NET
IBM's Cloudscape Versus MySQL


Sponsored Links