A website to help users share large files. The files must not be stored in the public directory on the server. All details about the file upload must be stored in a database.
The system should include the data for at least 10 real books and include the correct details for each. The customer details should also be valid.
You are required to create the following accounts to allow the system to be tested. All accounts should have the password p455w0rd
:
user1
user2
The core functionality consists of three screens.
The home screen should only be viewable if the user
is logged in. It should show the files the logged-in user
is sharing. This should include:
- The name of the upload (not the filename)
- The type of file (based on the mimetype calculated by the server)
There should be a link or button on the home page which takes the logged-in user
to an upload file page where they can upload individual files to the server. They should provide only the following information:
- The file (the user should be able to browse their computer to choose this).
- The name they want to give to the upload.
- The detailed, formatted, multi-line description.
If the logged-in user
clicks on an item on the home screen they should be taken to a details page whch displays:
- The name of the upload
- A detailed, formatted, multi-line description of the uploaded file
- The filetype (automatically generated by the system)
- The file size in MB (automatically generated by the system)
- A link to download the file (the link should reference the file by a hash so the filename should not appear in the URL).
- A link or button to delete the file.
The intermediate tasks require you to make changes to the functionality:
- The site should no longer display link to uploaded file, instead users will only be able to share files via email:
- When a file is uploaded the user should be prompted to enter the email address of the person they want to send the file to
- The system will then send an html-formatted email to this user containing a link to the file
- Once the file has been downloaded it should be deleted from the server
- If the link is not activated within a specified time period the file should be deleted
- Each user should have a maximum storage limit:
- The amount remaining should be displayed on the home page
- If the user tries to upload a file that will cause this storage limit to be exceeded the file upload will be rejected with a message explaining why
- The list of uploaded files should be displayed with the most recent at the top and each should display the filetype and the file size
- Only registered users can upload or download files.
- The system should track the bandwidth consumed by each user based on the size of files and how many times they are downloaded.
- Rather than deleting the file once it is downloaded the user can choose to keep the file on the site for up to 5 days (must choose between 1 and 5 days).
- All files in the list should have an appropriate icon reflecting what type of file they are and include information such as the file size and the date and time the file was uploaded as well as how long before it will be deleted.
In some assignment briefs you are given marks for the appropriate use of media and using sensors built into the user's device.
In some assignment briefs you are given marks for the appropriate use of sensors and sensor data. You should be implementing:
- When a file is uploaded the user should be given the option of using the integrated camera (if available).
- All uploaded images should be location-tagged.
- The user uploading a file should have the option to restrict access to users in the same country.
In the requirements listed above you need to provide the user with the ability to upload photos. For the extra media marks you will need to expand this by:
- Providing the user with the choice of uploading photos, video clips or audio clips.
- Giving users the option to directly capture images, audio and video clips using the built-in camera and/or microphone if available.
There are lots of online RESTful APIs you can make use of when developing this system. You should consider: