Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
# File Sharing
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.
## Stage 1
The core functionality consists of three screens:
1. The home screen is a list of the files the logged-in user is sharing. This should include:
1. The name of the upload (not the filename)
2. The type of file (based on the mimetype calculated by the server)
2. Clicking on an item in this page should take you to a details page whch displays:
1. The name of the upload
2. A detailed, formatted, multi-line description of the uploaded file
3. The filetype (automatically generated by the system)
4. The file size in MB (automatically generated by the system)
5. A link to download the file (the link should reference the file by a hash so the filename should not appear in the URL)
6. A link to delete the file
3. There should also be a button on the home page to allow the user to upload files to the server. They should provide the following information:
1. The file (obviously)
2. The name they want to give to the upload
3. The detailed, formatted, multi-line description
## Stage 2
The intermediate tasks require you to make changes to the functionality:
1. The site should no longer display link to uploaded file, instead users will only be able to share files via email:
1. 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
2. The system will then send an html-formatted email to this user containing a link to the file
3. Once the file has been downloaded it should be deleted from the server
4. If the link is not activated within a specified time period the file should be deleted
2. Each user should have a maximum storage limit:
1. The amount remaining should be displayed on the home page
2. 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
3. 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
## Stage 3
1. Only registered users can upload or download files.
2. The system should track the bandwidth consumed by each user based on the size of files and how many times they are downloaded.
3. 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).
4. 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.
----
## Extras
In some assignment briefs you are given marks for the appropriate use of media and using sensors built into the user's device.
### Sensors
In some assignment briefs you are given marks for the appropriate use of sensors and sensor data. You should be implementing:
1. When a file is uploaded the user should be given the option of using the integrated camera (if available).
2. All uploaded images should be location-tagged.
3. The user uploading a file should have the option to restrict access to users in the same country.
### Media
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:
1. Providing the user with the choice of uploading photos, video clips or audio clips.
2. Giving users the option to directly capture images, audio and video clips using the built-in camera and/or microphone if available.
### Data
There are lots of online RESTful APIs you can make use of when developing this system. You should consider:
1. [LocationIQ](https://locationiq.com)