App should be hosted as a Web app on Azure.
App needs to be built on Codeigniter 3.0.4.
App needs to use azure-sdk-for-php ( see [url removed, login to view])
App needs to identify the details of file being uploaded - original file name, file MIME type, file extension, image-width and image-height if it is an image.
App needs to restrict the user to upload only following file types - doc(x)/pdf/jpg/jpeg/png/gif/bmp/txt.
App needs to validate the MIME type of file against the file extension and stop file upload if they do not match - return an error in this case.
App needs to restrict the user to upload only files of size <= 1MB.
App needs to store all the details of file upload on mysql server. details per each file upload are user_name, file_name, file_url_for_public_access, file_mime_type, file_size, file_access_type (public/private).
App needs to upload files into azure blob storage with each user getting a separate container. blob name should be in the format file_%unix timestamp%.%ext%.
Users should be able to download files without logging in if they have url and the file is marked public.
Users should be logged-in to download files if the file was marked private.
User login can be as simple as one edit box for username, no need for any validations or fancy UI. File upload should be using jquery ajax library.
DB consists of only one table - uploads.
In browser, there are only two pages - login and upload.
On login page, when user enters the username, show upload page
In upload page, show the logged-in user's uploads directly from the uploads table, no fancy ui.
In upload page, provide a form with select-file button and upload button - user clicks select-file, selects a file from local drive, and clicks upload button - ajax request goes to server and server stores file in the azure blob storage and responds back to browser, ajax success handler shows an alert box success/fail . thats it at client side, no more DOM manipulation required.
In upload page, provide a logout button - when clicks, user logs out and taken to login page.
When user tries to access a private file without logging in, show forbidden error.