Mongoose always buffers a full HTTP message before invoking MG_EV_HTTP_MSG event. Big POST request require of lot of RAM to buffer everything.

In order to upload large files to a memory-constrained system, use MG_EV_HTTP_CHUNK on a server side. It fires when a partial HTTP message has been received (or a chunk-encoded chunk). Use mg_http_delete_chunk() to release chunk memory. When 0-sized chunk is received, that's the end of the message. Use MG_MAX_RECV_SIZE build constant to limit maximum chunk size on a server side.

In this example, JavaScript code uses "fetch()" browser API. Uploaded file is not saved, but rather printed by server side.