在我进入任何JavaScript,首先你应该了解文件如何上传一般使用Django的处理。 考虑下面的HTML表单:
因此,当用户点击提交按钮,浏览器将上传文件到/foo/url/使用HTTP方法POST 。 然后在Django中,URL服务器端/foo/url/将被映射到一些视图。 你的情况,这将是storeAndProcessFile 。 那么视图将要做的是采用一种被上传的文件存储到磁盘(或可能还有一些其他存储系统)。
现在,就像你在你的问题表明的观点并没有得到文件作为其函数的参数之一。 这是因为如何GET,POST,和文件数据在HTTP请求通过。 因此,该文件实际上将一部分request的视图中的参数。 你就可以通过引用文件request.FILES['foofile']
只是将文件存储到磁盘,您的看法可能看起来是这样的:
def storeAndProcessFile(request):
# make sure the the request method is POST
if request.method != 'POST':
return HttpResponseBadRequest('Only POST requests are allowed')
# now get the uploaded file
file = request.FILES['foofile']
# the file is going to be an instance of UploadedFile
with open('/destination/path/%s' % file.name, 'wb+') as dest:
for chunk in file.chunks():
dest.write(chunk)
# return success message
return HttpResponse('File uploaded')
此代码是相当多出来的Django文档。 如果你想知道更多,你可以阅读它在这里 。
至于使用Javascript,还有吨的jQuery插件在哪里可以一次上传用ajax或文件甚至多个文件。 我真的很喜欢这个库。 它有许多功能,包括发送多个文件。 但是,如果这是太多了,你可以这样做的jQuery文件上传插件搜索,并有吨他们,但我没有测试任何其他最近所以不能给任何建议。
然而,有一两件事,让AJAX请求到Django的网站,这是CSRF时牢记。 由于Django的1.2.5他们改变CSRF如何验证,可以打破很多上传库。 如果你并不需要担心,你可以随时添加csrf_exempt装饰:
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def storeAndProcessFile(request):
...
然而,如果你需要CSRF,你可以看看整合jQuery的文件上传启用CSRF的样本实现在这里 。