CGI - Recuperar variable FILE de Formulario Multipart

 
Vista:

Recuperar variable FILE de Formulario Multipart

Publicado por Silvia (2 intervenciones) el 28/12/2001 06:26:22
Necesito saber como se pueden recojer las variables HTML pasadas a un CGI por el método post cuando el formulario tiene el enctype="multipart/form-data" . La variable q me da problemas es una input type="file la cual quiero recogerla en una vaciable del cgi para almacenarla en el server unix. Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Recoger variables HTML de un formulario con enctype "multipart/form-data" en un CGI en C

Publicado por Alejandro (140 intervenciones) el 23/08/2023 17:05:03
Cuando estás trabajando con formularios que utilizan el atributo `enctype="multipart/form-data"` para cargar archivos, el procesamiento en un script CGI en C se complica un poco en comparación con los formularios que solo envían datos en formato `application/x-www-form-urlencoded`. Aquí te proporciono una guía sobre cómo recoger los datos de un formulario con `enctype="multipart/form-data"` en un CGI en C:

1. Manejo de la subida de archivos:

Para manejar la subida de archivos utilizando `multipart/form-data`, el servidor web suele poner a disposición del script CGI los datos en `stdin` y proporcionar información sobre el archivo en variables de entorno. La biblioteca estándar de C no proporciona un análisis directo de los datos `multipart/form-data`, por lo que generalmente se utiliza una biblioteca externa, como "cgi-lib" o "libcgic", para simplificar el proceso.

2. Usar una biblioteca externa (libcgic):

Libcgic es una biblioteca C diseñada específicamente para simplificar la manipulación de datos CGI. Puedes descargarla e incluirla en tu proyecto.

Aquí tienes un ejemplo de cómo usar libcgic para manejar la subida de archivos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>
#include "cgic.h"
 
int cgiMain() {
    cgiFilePtr file;
    int size;
    char name[128];
    char contentType[128];
 
    if (cgiFormSubmitClicked("submit-button") == cgiFormSuccess) {
        cgiHeaderContentType("text/html");
 
        // Manejo de campos normales
        cgiFormString("field_name", name, sizeof(name));
 
        // Manejo de archivo subido
        file = cgiFormFileOpen("file_field_name", &contentType);
        if (file != NULL) {
            size = cgiFormFileSize(file);
            // Aquí puedes leer y guardar el archivo en el servidor
            cgiFormFileClose(file);
        }
 
        printf("Content-Type: text/html\n\n");
        printf("<html><body>Archivo subido y datos recibidos</body></html>");
    }
 
    return 0;
}
/code]
 
   En este ejemplo, `"file_field_name"` debe ser reemplazado por el nombre real del campo `input type="file"` en tu formulario.
 
3. Compilación:
 
   Asegúrate de que tu proyecto esté enlazado con la biblioteca `cgic`. La compilación puede variar según tu entorno, pero generalmente sería algo como:
 
[code]gcc -o tu_programa.cgi tu_programa.c -lcgic

4. Validación y seguridad:

Como siempre, asegúrate de validar y sanitizar los datos proporcionados por los usuarios antes de procesarlos y de almacenar los archivos subidos en un directorio seguro y con los permisos adecuados en tu servidor Unix.

Recuerda que esta es una guía básica y que las implementaciones específicas pueden variar según las bibliotecas que elijas y la configuración de tu servidor web.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar