Django 文件上传

八月 3rd, 2010, in WEB开发, by None
本文介绍的 Django 文件上传不是 Django 1.0 以上的上传方法,而是一般通用的文件上传。主要使用 HttpRequest 对象的 FILES 属性,一个类似字典的属性。

FILES

是一个包含所有上传文件的类似于字典的对象,它里面的每个 key 的名称来自于表单输入控件 <input type="file" name="" /> 中的 name 属性。每个 key 的值为标准的 Python 字典,其里面又包含以下三个 Key-Value 键值对:

  • filename: 上传的文件的名字。
  • content-type: 上传文件的类型。
  • content: 上传文件的原始内容

注意:只要在表单中指定提交方式为 POST,而且有 enctype="multipart/form-data" 这个属性,FILES 对象不为空。

处理上传文件的内容

也就是我们需要保存 FILES 中 content 的内容到磁盘上,核心的方法如以下这段代码:

def saveUploadFile (file_obj, types=(), size=524288): ''' 处理上传文件 v1.0 可设置上传文件类型: types 可设置上传文件大小: size @magicalboy 10.8.3 ''' from fileupload.settings import MEDIA_ROOT from os import makedirs from os.path import isdir, exists, dirname if types: # 判断是否限制上传文件类型 if not file_obj['content-type'] in types: # 判断上传的文件类型 return False, "不允许上传的文件类型!" buf = file_obj['content'] if len(buf) < size: # 判断上传文件大小 filename = file_obj['filename'] savePath = '%s/%s' % (MEDIA_ROOT, filename.decode('utf8')) dir = dirname(savePath) if not isdir(dir): # create archive dir if nec. makedirs(dir) f = open(savePath, 'wb+') f.write(buf) f.close() return True, "" else: return False, "上传文件不能大于 %d K!" % size

完整源代码下载:

fileupload.zip

测试环境:

WinXP + Python 2.4 + Django 9.05

运行效果:

3 回复在 Django 文件上传

  1. DouO says:

    楼主大牛逼啊,差点给这个问题搞死了

  2. 路人甲 says:

    你这个是用户上传文件之后才判断文件大小的吧。 要是用户直接上传一个2G甚至更大的文件呢?

  3. Donly says:

    这种方法只适用于上传小文件,图片等。 如果要上传大文件可通过file写js脚本,进行判断

发表回复

您的 email 地址不会被公开。 必填信息前已经标志为 *

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>