This is an app for your Django project to enable large uploads using flow.js to chunk the files client side and send chunks that are re-assembled on server side.
NOTE: I have done this just to help me on a project and I haven't been updating the code. Feel free to take control of the project. This was working with ng-flow-standalone 2.5.1. Celery isn't required but it is recommended.
Add 'flowjs' to INSTALLED_APPS
INSTALLED_APPS = (
      ...
      'flowjs',
      ...
)
Add 'flowjs' to urls.py
urlpatterns = (
      ...
      url(r'^flowjs/', include('flowjs.urls')),
      ...
)
FLOWJS_PATH: Media path where the files are saved. Default: 'flowjs/'
FLOWJS_REMOVE_FILES_ON_DELETE: Remove the upload files when the model is deleted. Default: True
FLOWJS_AUTO_DELETE_CHUNKS: Remove temporary chunks after file have been upload and created. Default: True
FLOWJS_EXPIRATION_DAYS: Time in days to remove non completed uploads. Default: 1
FLOWJS_JOIN_CHUNKS_IN_BACKGROUND: When flowjs should join files in background. Options: 'none', 'media' (audio and video), 'all' (all files). Default: 'none'
<span flow-init="initFlow()" flow-btn
      flow-file-progress="uploadProgress($flow, $file)"
      flow-files-submitted="openUploadProgressModal($flow)"
      flow-file-success="fileUploadedSuccessfully($flow, $message)">
</span>
The script is only working for 1 file and 1 simultaneousUpload.
function initFlow() {
    return {
        target: '/flowjs/upload/',
        singleFile: true,
        query: {'csrfmiddlewaretoken': $cookies.csrftoken},
        simultaneousUploads: 1
    }
}
This is an example of how to update a variable while the file is uploading
function uploadProgress($flow, $file) {
    $flow.item.progress = parseInt($file._prevUploadedSize / $file.size * 100);
    $flow.item.speed = $file.currentSpeed;
}
Open a modal or something to show the progress bar
function openUploadProgressModal($flow) {
    // Write something here
}
Function to handle the download
function fileUploadedSuccessfully($flow, $message) {
    $http.post("/some-url-to-handle-file/", {identifier: $message})
        .success(function () {});
}
def view_to_handle_download(request):
    # get and validate flow file to use as media file
    identifier = request.POST.get('identifier', '')
    try:
        flow_file = FlowFile.objects.get(identifier=identifier)
        if not flow_file.is_valid_session(request.session.session_key):
            return http.HttpResponseForbidden()
    except FlowFile.DoesNotExist:
        raise http.Http404()
    # Do something now with the flow_file.
    # If the file is being joined in background, there's no guarantee
    # the flow_file.file is ready at this moment. A signal is fired when is ready.
There are 3 signals being fired: file_is_ready, file_upload_failed and file_joining_failed.