Uploads handled, size checked. Requires login.

Error pages return json if requested, or plaintext if html not accepted.