С текстовыми полями получается, а вот картинки сохранить — нетривиальная загогулина. Юниксовые программы (или мои о них знания) плохо подходят для обработки бинарных данных.
Проще будет так: сохранить весь запрос, пришедший с файлового инпута multiple в один файл, просто cat. Затем выпарсить отдельные файлы, но:
while read _ ... echo или printf — не подойдёт, испортит данные;
dd не катит — размер каждого из файлов неизвестен;
Нужно как-то найти разделитель, потом следующий, и сохранить то, что между ними. Я бы такую утилиту на сишке написал, но это не чистое решение.
>>201587
> проверять content-length
Он один для всего запроса, а не для каждого из файлов. Почему это не добавили в CGI наряду с MIME-типом, я не знаю, было бы гораздо проще.
Получается типа того…
-----------------------------29995809218093749221856446032^M
Content-Disposition: form-data; name="file1"; filename="..."^M
Content-Type: application/octet-stream^M
^M <--------- headers end with empty line
file contents
file contents
file contents
^M <--------- extra empty line
-----------------------------29995809218093749221856446032--^M
Вот если б только было
Content-Type: application/octet-stream; length="N"^M
!