django-resumable
provides django backend stuff that handles resumable.js xhr uploads.
pip install django-resumable
- Add
resumable
to yourINSTALLED_APPS
In order to upload files asynchronous, you must define an endpoint that will deal with uploaded file chunks:
from django.contrib.auth.decorators import login_required
from resumable.views import ResumableUploadView
urlpatterns += patterns('',
url('^upload/$', login_required(ResumableUploadView.as_view()),
name='upload'),
)
You should also consider having per user chunk upload directory:
class MyResumableUploadView(ResumableUploadView):
@property
def chunks_dir(self):
return self.request.user.profile.chunks_dir
If you want to handle resumable upload within your forms, you can use the ResumableFileField
that works like django core FileField
:
from django.conf import settings
from django.core.urlresolvers import reverse
from resumable.fields import ResumableFileField
class ResumableForm(Form):
file = ResumableFileField(
allowed_mimes=("audio/ogg",),
upload_url=lambda: reverse('upload'),
chunks_dir=getattr(settings, 'FILE_UPLOAD_TEMP_DIR')
)
django-resumable
comes with extendable frontend scripts that work out of the box:
{% load staticfiles %}
<!DOCTYPE html>
<html>
<body>
<form method="post" action=".">
<fieldset>
{% csrf_token %}
{{ form.as_p }}
</fieldset>
<p><input type="submit" value="send" /></p>
</form>
<script type="text/javascript" src="https://raw.github.com/23/resumable.js/master/resumable.js"></script>
<script type="text/javascript" src="{% static 'resumable/js/django-resumable.js' %}"></script>
<script type="text/javascript" src="{% static 'resumable/js/init.js' %}"></script>
</body>
</html>