It needs a hook in the multipart decoding API so it can ask for more data if some is missing. The callback could be passed to the couch_httpd:recv_chunked function. and next call can be back on couch_httpd:recv_chunked:

 couch_httpd:recv_chunked(Req, 4096, fun ({_Len, Data}, _State) ->
     {Data, fun() ->  couch_httpd:recv_chunked(Req, 4096, ... }

something like it.