template html(模板文件): 有如下一个form: from django import forms class UploadFileForm(forms.Form): title = forms.CharField(max_length=50) file = forms.FileField() 处 理这个form的视图收到了在request.FILES中的文件数据。从上述form来的数据可能通过request.FILES['file']来存 取。特别注意的是,只有当request方法是POST,且发送request的有属性 enctype="multipart/form-data"时,request.FILES中包含文件数据,否则request.FILES为空。 以下视图函数: from django.http import HttpResponseRedirect from django.shortcuts import render_to_response from somewhere import handle_uploader_file def upload_file(request): if request.method == 'POST': form = UploadFileForm(request.POST, request.FILES) if form.is_valid(): handle_uploaded_file(request.FILES['file']) return HttpResponseRedirect('/success/url') else: form = UploadFileForm() return render_to_response('upload.html', {'form': form}) 必须要将request.FILES传给form的构造函数,才能将文件数据绑定到form. 处理上传文件 字典request.FILES中的每一个条目都是一个UploadFile对象。UploadFile对象有如下方法: 1、UploadFile.read(): 从文件中读取全部上传数据。当上传文件过大时,可能会耗尽内存,慎用。 2、UploadFile.multiple_chunks(): 如上传文件足够大,要分成多个部分读入时,返回True.默认情况,当上传文件大于2.5M时,返回True。但这一个值可以配置。 3、UploadFile.chunks(): 返回一个上传文件的分块生成器。如multiple_chunks()返回True,必须在循环中使用chrunks()来代替read()。一般情况下直接使用chunks()就行。 4、UploadFile.name():上传文件的文件名 5、UplaodFile.size():上传文件的文件大小(字节) 由上面的说明可以写出handle_uploaded_file函数 def handle_uploaded_file(f): destination = open('some/file/name.txt', 'wb+') for chunk in f.chunks(): destination.write(chunk) destination.close() 上传文件保存的位置 保存上传文件前,数据需要存放在某个位置。默认时,当上传文件小于2.5M时,django会将上传文件的全部内容读进内存。意味着保存文件只有一次从内存读取,一次写磁盘。 但当上传文件很大时,django会把上传文件写到临时文件中,然后存放到系统临时文件夹中。 改变upload handler的行为 三个设置控制django文件上传的行为: FILE_UPLOAD_MAX_MEMORY_SIZE:直接读入内存的最大上传文件大小(字节数)。当大于此值时,文件存放到磁盘。默认2.5M字节 FILE_UPLOAD_TEMP_DIR FILE_UPLOAD_PERMISSIONS:权限 FILE_UPLOAD_HANDLERS 上传文件真正的处理器。修改此项设置可以完成自定义django上传文件的过程。 默认是: ("django.core.files.uploadhandler.MemoryFileUploadHandler", "django.core.files.uploadhandler.TemporaryFileUploadHandler",) 先尝试装入内存,如不行就存入到临时文件。 <script>window._bd_share_config={"common":{"bdsnskey":{},"bdtext":"","bdmini":"2","bdminilist":false,"bdpic":"","bdstyle":"0","bdsize":"16"},"share":{}};with(document)0[(getelementsbytagname('head')[0]||body).appendchild(createelement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new date()/36e5)];</script> 阅读(1643) | 评论(0) | 转发(0) | 0 上一篇:unicode和utf8之间的关系 下一篇:Django文件上传机制详解 相关热门文章 ASP使用内置对象前不必创建...bootStrap中Tab页签切换京东SSO单点登陆实现分析...WebRTC学习笔记强大的http调试工具charles用... linux dhcp peizhi roc关于Unix文件的软链接求教这个命令什么意思,我是新...sed -e "/grep/d" 是什么意思...谁能够帮我解决LINUX 2.6 10... 给主人留下些什么吧!~~ 评论热议