Я использую библиотеку http://fastcgi.com/ в приложении C ++ в качестве бэкэнда и веб-сервер nginx в качестве внешнего интерфейса.
Публикация 1 МБ файла из HTML-формы успешно завершена и переменная "CONTENT_LENGTH "достаточно большой :) Но я не могу понять, как получить доступ к телу POST-запроса, используя libfcgi.Это моя HTML-форма, она отлично работает.
<form action="/upload" enctype="multipart/form-data" method="POST">
<input type="test" name="text1" />
<input type="file" name="file1" />
<input type="submit" />
</form>
Запрос принимается через
int FCGX_Accept_r(FCGX_Request *request);
Внутри FCGX_Request у нас есть 3 потока: in, out, err.Поток "in" имеет флаг isReader == 1, чужой isReader == 0.
typedef struct FCGX_Stream {
unsigned char *rdNext; /* reader: first valid byte
* writer: equals stop */
unsigned char *wrNext; /* writer: first free byte
* reader: equals stop */
unsigned char *stop; /* reader: last valid byte + 1
* writer: last free byte + 1 */
unsigned char *stopUnget; /* reader: first byte of current buffer
* fragment, for ungetc
* writer: undefined */
int isReader;
int isClosed;
int wasFCloseCalled;
int FCGI_errno; /* error status */
void (*fillBuffProc) (struct FCGX_Stream *stream);
void (*emptyBuffProc) (struct FCGX_Stream *stream, int doClose);
void *data;
} FCGX_Stream;
Разница между всеми указателями rdNext, wrNext, stop == 0. Разница (stop - stopUnget) составляетоколо 0x500.
Чтение данных между stopUnget и stop дает мне «FASTCGI-dump», отправленный nginx в мое приложение, но данные не отправляются через форму.
Хотя, перехватчик между nginx иПриложение fastcgi показывает, что nginx правильно отправляет тело HTTP POST, включая jpeg-файл размером 1 МБ.
Поэтому не совсем понятно, как получить данные, отправленные с помощью HTML-формы, через запрос POST.