Because the request body can be of any size, reading the body will only work once, as Plug will not cache the result of these operations. If you need to access the body multiple times, it is your responsibility to store it. Finally keep in mind some plugs like Plug.Parsers may read the body, so the body may be unavailable after being accessed by such plugs.
What parsers are you using in your Phoenix endpoint? How exactly do you do the upload from the client side?
The client site uses react and they have some mistakes in their code, they put params in the wrong place I guess. Somehow fetching the file for uploading is also wrong. Have no idea on the front end stuff.