dam*_*mon 2 javascript python django
我需要上传一个包含一些数据的文本文件,我local filesystem要说{{MEDIA_URL}}/uploadfolder.这个文件将由我django视图中的一个函数处理.
我<input type="file" id="fselect" >在我的html页面中创建了一个.我创建了一个javascript文件,我试着调用上传函数,如下所示
$(document).ready(function(){
...
$('#fselect').change(function(){
file=$('#fselect').get(0).files[0];
uploadFile(file);
}
});
Run Code Online (Sandbox Code Playgroud)
当我使用萤火虫,并尝试
file=$('#fselect').get(0).files[0]
Run Code Online (Sandbox Code Playgroud)
我能够获取File对象,它是使用input元素选择的文本文件.如何使用此File对象调用django视图?在django视图中,此File对象将是什么数据类型?
def storeAndProcessFile(request,file):
pass
Run Code Online (Sandbox Code Playgroud)
在进入任何javascript之前,首先应该了解如何使用Django上传和处理文件.请考虑以下html表单:
<form method="post" action="/foo/url/">
<input type="file" name="foofile">
<input type="submit" value="Upload">
</form>
Run Code Online (Sandbox Code Playgroud)
因此,当用户单击"提交"按钮时,浏览器会将该文件上载到/foo/url/使用HTTP方法POST.然后在Django的服务器端,url /foo/url/将映射到某个视图.在你的情况下它将是storeAndProcessFile.所以视图必须做的是获取上传的文件并将其存储到磁盘(或可能是其他存储系统).
现在,视图不会将文件作为您在问题中显示的函数参数之一.这是因为如何在HTTP请求中传递GET,POST和FILE数据.因此该文件实际上是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')
Run Code Online (Sandbox Code Playgroud)
这段代码几乎不属于Django文档.如果您想了解更多信息,可以在此处阅读.
至于Javascript,有大量的jQuery插件,可以使用ajax甚至多个文件一次上传文件.我真的很喜欢这个图书馆.它有许多功能,包括发送多个文件.然而,如果这太多了你可以只搜索jQuery文件上传插件,并且有很多但我最近没有测试任何其他,所以不能给出任何建议.
但是,在向Django站点(即CSRF)发出ajax请求时,需要记住一件事.自Django 1.2.5以来,他们改变了CSRF的验证方式,并且可以打破许多上传库.如果您不需要担心它,您可以随时添加csrf_exempt装饰器:
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def storeAndProcessFile(request):
...
Run Code Online (Sandbox Code Playgroud)
但是,如果您需要CSRF,可以查看在此处启用CSRF的集成jQuery文件上传器的示例实现.
| 归档时间: |
|
| 查看次数: |
3576 次 |
| 最近记录: |