Unfortunately, it's a bug inside WebView2. Could you run the upload again under WebView2 with this in the receiving script:
var_dump($_FILES['file']);
var_dump($_SERVER['CONTENT_LENGTH'] ?? null, strlen(file_get_contents('php://input')));
What matters is:
whether tmp_name is an empty string...