• Publicidad

Malformed multipart POST: data truncated

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Re: Malformed multipart POST: data truncated

Notapor explorer » 2009-09-04 15:56 @705

El error dice que Perl no tiene ni idea de dónde está la función upload(). Hay que decirle que está en el módulo CGI.

Cambia
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use CGI;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

por
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use CGI ':cgi';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


La etiqueta ':cgi' hace importar un montón de funciones y variables relacionadas con operaciones de CGI a nuestro programa. Una de ellas es la función upload().

Aprender a usar el módulo CGI es muy importante, y solo hay dos formas de hacerlo: leyendo mucho código y leyendo su manual de instrucciones.

Sí, ya sé que es un auténtico ladrillo, pero los beneficios son muchos. Entre ellos, dejar tu programa así.

Con una página HTML así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
  1. <html>
  2. <body>
  3. <form method="POST" enctype="multipart/form-data" action="cgi-bin/code_18877.pl">
  4. <input type="file" name="file" size="50"> <input type="submit" value="Enviar" />
  5. </form>
  6. </body>
  7. </html>
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

queda el programa así (una de las muchas formas de hacerlo):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. use CGI       ':standard';
  7. use CGI::Carp 'fatalsToBrowser';
  8.  
  9.  
  10. ## Constantes
  11. my @extensiones = qw( gif jpg jpeg bmp png txt );               # Arreglo con extensiones de archivos que podemos recibir
  12. my $dir = '/home/explorer.joaquinferrero.com/public_html/tmp';  # Directorio donde queremos estacionar los archivos
  13.  
  14.  
  15. ## Variables
  16. my $fichero_a_recibir = param('file') || '';
  17.  
  18.  
  19. ## Proceso
  20. foreach my $extension (@extensiones) {
  21.  
  22.     if ($fichero_a_recibir =~ /\.$extension/) {
  23.  
  24.         my $fh = upload('file');
  25.  
  26.         if (!$fh && cgi_error) {                                # Ocurrió un error o el usuario abortó el envío
  27.             print header(-status => cgi_error);
  28.             exit 0;
  29.         }
  30.  
  31.         my $fichero_a_grabar = "$dir/$fichero_a_recibir";
  32.  
  33.         open OUT, ">$fichero_a_grabar" or die "ERROR: No puedo escribir $fichero_a_grabar: $!\n";
  34.  
  35.         while (read($fh, my $buffer, 1024)) {
  36.             print OUT $buffer;                                  # Copia
  37.         }
  38.  
  39.         close OUT;
  40.  
  41.         print header                                            # Gracias
  42.             , start_html('Gracias por el envío')
  43.             , p("Gracias por el envío de $fichero_a_recibir")
  44.             , end_html
  45.             ;
  46.  
  47.         exit;
  48.     }
  49. }
  50.  
  51. print header                                                    # Oops... algo fue mal
  52.     , start_html('ERROR')
  53.     , h1('Extensión incorrecta')
  54.     , p("Sólo se reciben archivos con extensiones: @extensiones")
  55.     , p("Archivo: [$fichero_a_recibir]")
  56.     , end_html
  57.     ;
  58.  
  59. __END__
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2009-09-04 16:14 @718, editado 2 veces en total
Razón: ascii-art
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Re: Malformed multipart POST: data truncated

Notapor makhix » 2009-09-04 16:39 @735

Jajaja, perdiste la paciencia :lol:

Perdón pero la idea era hacerlo yo. Igualmente me salvó que me dijeras que la función upload() está en CGI ':cgi'; porque no lo sabía. La documentación la leí pero bueno, el inglés no es lo mío, como se habrá notado.

La cosa es que funciona el script que había hecho, pero no tengo permisos para escribir en el servidor (CHAN!) :shock:

Jajaja, era eso. Bueno, para la próxima te prometo no ser tan gomoso... :mrgreen:

Te mando un abrazo y mil gracias por la ayuda. Juro que no posteo en una semana (aunque no lo puedo asegurar) jajaja :lol:

PD: ¡Buen fin de semana!
Última edición por explorer el 2009-09-04 16:51 @744, editado 1 vez en total
Razón: Ortografía
makhix
Perlero nuevo
Perlero nuevo
 
Mensajes: 28
Registrado: 2009-08-06 15:13 @675

Re: Malformed multipart POST: data truncated

Notapor explorer » 2009-09-04 16:49 @742

Tienes que ocuparte en dar permisos de escritura al directorio donde vas a guardar los ficheros.

Con un chmod 777 carpeta ya estás dando permisos para escritura a todos. Ten en cuenta que quien realiza la escritura es el usuario que ejecuta el servidor web.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Malformed multipart POST: data truncated

Notapor makhix » 2009-09-07 21:35 @941

Si es lo que quise hacer... Pero no te olvides que el server no lo administro yo, son los panchos que les encantan las ventanitas... :lol:

Y bueno, debe tener permiso de escritura sobre las carpetas el user guest.

Pero es así la vida... :cry:

Por lo demás, mil gracias.
makhix
Perlero nuevo
Perlero nuevo
 
Mensajes: 28
Registrado: 2009-08-06 15:13 @675

Anterior

Volver a Web

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados