Post запрос выглядит примерно так, где (data) это файл. Суть в том, что вы считываете значение boundary
и по этому значению ищете полезную нагрузку в которой и лежит файл. Затем парсите поля которые лежат внутри, если нужно конечно. А затем начинаете читать data и записывать файл до того момента пока не встретите закрывающую boundary.
POST / HTTP/1.1
Host: 127.0.0.1:80
Content-Length: 179
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="image"; filename="charlize.jpg"
Content-Type: image/jpeg
(data)
----WebKitFormBoundary7MA4YWxkTrZu0gW