Implement async file upload.
Add cache service back.
use cache service for async upload progress
clean up and fix bugs.
add unit test