Я хочу ответить на этот вопрос:
Можно ли прочитать заголовки полей из нескольких частей перед их содержимым?
Когда я смотрю на multipart rfc , я вижу этот пример:
From: Nathaniel Borenstein <nsb@bellcore.com>
To: Ned Freed <ned@innosoft.com>
Subject: Formatted text mail
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary=boundary42
--boundary42
Content-Type: text/plain; charset=us-ascii
...plain text version of message goes here....
--boundary42
Content-Type: text/richtext
.... richtext version of same message goes here ...
--boundary42
Content-Type: text/x-whatever
.... fanciest formatted version of same message goes here
...
--boundary42--
Отмечу, что заголовки вроде Content-Type
расположены между частями тела. Таким образом, я пришел к выводу, вы не можете все заголовки перед всеми органами.
Теперь к вашему вопросу:
Я хочу проанализировать составную форму дважды: один раз, чтобы получить входящие поля, а затем обработать загрузку файла.
Это зависит от того, что вы подразумеваете под "разбором". При чтении HTTP-сообщения происходит анализ, чтобы узнать, когда оно заканчивается. Конец имеет дополнительный --
в конце:
--boundary42--
Идеи разбора дважды:
- Я пришел к выводу, что нужно иметь возможность скопировать весь ответ из сокета и выполнить анализ позже.
- Вы можете прочитать заголовки файла перед телом файла, но не все заголовки всех файлов.
Это вообще возможно?
Да, есть случаи, когда это возможно (когда файл является последним загруженным файлом). Я не знаю, возможно ли всеобщее, что вам нужно, потому что я не знаю точно, что вы хотите сделать.
Я надеюсь, что это проясняет вещи. Если это не полный ответ или вам это не нравится, скажите нам, почему, потому что это может быть ценным откликом для тех, кто пытается ответить на вопрос.