comment accéder à un corps de requête POST à l'aide de fastcgi application C/C++
Je suis en utilisant une bibliothèque de http://fastcgi.com/ en C++ de l'application comme un backend et nginx serveur web front-end.
La publication des fichiers de HTML-forme avec succès, et voir les fichiers temporaires sur nginx côté serveur. Mais je ne peux pas comprendre comment accéder à un corps de plusieurs parties d'une requête POST à l'aide de fastcgi_stdio. C'est mon HTML-forme.
<html>
<head>
<title>Test Server</title>
<script src="http://code.jquery.com/jquery.min.js"></script>
</head>
<body>
<form id="upload-form" method="post" target="upload_target" enctype="multipart/form-data" action="/upload">
<input name="file" id="file" size="27" type="file" /><br />
<input type="submit" name="action" value="Upload" /><br />
<iframe id="upload_target" name="upload_target" src="" style="width:100%;height:100px;border:0px solid #fff;"></iframe>
</form>
</body>
</html>
Mon fichier conf de nginx:
location /upload {
# Pass altered request body to this location
upload_pass @test;
# Store files to this directory
# The directory is hashed, subdirectories 0 1 2 3 4 5 6 7 8 9 should exist
upload_store /www/test;
# Allow uploaded files to be read only by user
upload_store_access user:rw group:r all:r;
# Set specified fields in request body
upload_set_form_field $upload_field_name.name $upload_file_name;
upload_set_form_field $upload_field_name.content_type "$upload_content_type";
upload_set_form_field $upload_field_name.path "$upload_tmp_path";
# Inform backend about hash and size of a file
upload_aggregate_form_field "$upload_field_name.md5" "$upload_file_md5";
upload_aggregate_form_field "$upload_field_name.size" "$upload_file_size";
upload_pass_form_field "^submit$|^description$";
upload_cleanup 400 404 499 500-505;
}
include fastcgi.conf;
# Pass altered request body to a backend
location @test {
fastcgi_pass localhost:8080
}
Maintenant, comment peut-poignée/obtenir le POSTE du corps de la requête dans mon fastcgi application c++ et comment écrire dans un fichier à l'application fastcgi côté ?
Est-il mieux fast module pour y parvenir?
Merci.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez accéder à la
POST
corps par l'intermédiaire de laFCGI_stdin
flux. Par exemple, vous pouvez lire un octet à la fois à l'aide deFCGI_getchar
, qui est une forme courte pourFCGI_fgetc(FCGI_stdin)
. Vous pouvez lire plus gros morceaux de données dans un seul appel à l'aide deFCGI_fread
. Tout ce que j'ai trouvé en regardant la source. Souvent, ces sources de référence de quelque chose qui s'appelle ”H&S”—ce qui signifie "Harbison et Steele", les auteurs du livre C: Un Manuel De Référence, et les numéros renvoient aux chapitres et sections de ce livre.Et par la manière, il est appelé “stdio” pour “Entrée/Sortie STanDard”. Pas de “studio”. Les fonctions doivent surtout se comportent comme leurs homologues sans
FCGI_
de préfixe. Donc, pour plus de détails, regardez les pages man degetchar
,fread
et ainsi de suite.Une fois que vous avez les octets dans votre application, vous pouvez les écrire dans un fichier, soit l'utilisation normale stdio les opérations ou les fichiers ouverts par
FCGI_fopen
. Notez cependant que le flux d'entrée ne sera pas directement correspondre au contenu d'un fichier téléchargé. Au lieu de cela, codage MIME est utilisé pour transférer toutes les données de formulaire, y compris les fichiers. Vous aurez à analyser les flux si vous souhaitez accéder au fichier de données.Utiliser ceci: