Tengo un problema utilizando el metodo upload de CGI cuando la informacion es enviada des de un script en ajax (lado cliente). (el codigo esta mas abajo).
No puedo obtener el filehandle para leer el archivo subido y luego escribirlo en el servidor.
El mensaje de error en perl (servidor):
Cita:
No tengo ningun problema pasando los parametros des del ajax ni tampoco creando la carpeta o archivo (vacio). Entonces los permisos parecen estar correctos.Use of uninitialized value in <HANDLE>
Tambien he probado de anadir contentType en ajax:
Código:
Pero no llego al CGI y obtengo el siguiente error en el servidor:contentType: "multipart/form-data",
Cita:
Alguna idea como solucionar este problema?Malformed multipart POST: data truncated
Alguien tiene algun ejemplo sencillo de como usar perl para subir archivos des d'una web en ajax?
html form
Código HTML:
<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>
Código:
$(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
Código:
#!/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;