То есть, POST делается джаваскриптом в скрытом фрэйме, второй джаваскрипт
показывает progress bar или сообщение об ошибке, а в основном окне ничего
не меняется.
Собственно, как раз этот момент совсем не проблема. Всё, что нужно - это чтобы сервер, в случае успеха возвращал на запрос клиента что-то вроде:
result: uploading
filesize: 102030
uploaded: 108
а в случае ошибки
result: error
code: 40x
text: request body is too large
остальное сделает клиент.