You are looking too deeply into your app stack. This kind of file uploads needs to be handled by the webserver itself. All modern webservers have a way to stream files from a user onto the disc (this way you don't have memory issues as only the current chunk is in memory at any give time) and then notify your app once the upload is completed.
For nginx, you want to use the nginx_upload_module: http://www.grid.net.ru/nginx/upload.en.html
I'm not sure right off hand how you'd configure Apache for this.
Hope that helps.