Django: 路由与视图 互动版

提取上传文件

对于使用file类型的<input>元素上传的文件,Django将其封装 为UploadedFile对象,存储在请求对象的FILES(伪)字典中,其键名 与表单<input>元素的name属性一致。

例如,当用户提交如下的表单时:

<form action="/upload/" method="POST" enctype="multipart/form-data">
    <input type="file" name="uf">
    <input type="submit" value="Upload">
</form>

可以在视图函数中使用请求对象的FILES属性读取其UploadedFile对象:

def v_upload(req):
    uf = req.FILES['uf']
    cnt = uf.read()
    return HttpResponse(cnt)

需要注意的是:

  1. 表单必须以POST方法提交
  2. 表单编码格式必须设置为multipart/form-data

django.core.files.uploadedfile.UploadedFile

UploadedFile类的主要属性和方法如下:

  • name - 上传文件名
  • size - 上传文件字节数
  • read() - 读取上传文件全部内容。如果文件过大,使用这个方法可能搞死服务器。这时应当使用chunks()生成器
  • chunks() - 返回一个生成器,用来迭代读取上传文件内容

详细的属性和方法可以参考官网: Uploaded Files

修改示例代码中的视图v_upload,将上传文件保存到本地的aaa.txt文件