Hola a todos,
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: Use of uninitialized value in <HANDLE>
No tengo ningun problema pasando los parametros des del ajax ni tampoco creando la carpeta o archivo (vacio). Entonces los permisos parecen estar correctos.
Tambien he probado de anadir contentType en ajax:
Código:
contentType: "multipart/form-data",
Pero no llego al CGI y obtengo el siguiente error en el servidor:
Cita: Malformed multipart POST: data truncated
Alguna idea como solucionar este problema?
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>
AJAX
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;