Django可分上传
项目描述
django-resumable
django-resumable提供了处理resumable.js xhr上传的django后端功能。
安装
pip install django-resumable
将resumable添加到您的INSTALLED_APPS
视图
为了异步上传文件,您必须定义一个处理已上传文件块的路由
from django.contrib.auth.decorators import login_required
from resumable.views import ResumableUploadView
urlpatterns += patterns('',
url('^upload/$', login_required(ResumableUploadView.as_view()),
name='upload'),
)
您还应该考虑为每个用户创建一个单独的文件块上传目录
class MyResumableUploadView(ResumableUploadView):
@property
def chunks_dir(self):
return self.request.user.profile.chunks_dir
字段
如果您想在表单中处理可分上传,可以使用类似django核心FileField的ResumableFileField
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')
)
JavaScript
django-resumable附带可扩展的前端脚本,开箱即用
{% 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>