模板文件:
<form method='post' action='/script/upload/' enctype="multipart/form-data" accept-charset="utf-8"> {% csrf_token %} <input type='file' name='file' /> <input type='submit' value='上传' /> </form>
视图函数:
def upload(request): def handle_uploaded_file(f): destination = open('gamepost.xml', 'w') for chunk in f.chunks(): destination.write(chunk) destination.close() if request.method == 'POST': handle_uploaded_file(request.FILES['file']) return HttpResponse('游戏公告更新成功!')
form 表单里有一句 enctype="multipart/form-data",在上传文件的表单里必须要有这个。enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。
默认地,表单数据会编码为 "application/x-www-form-urlencoded"。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值)。其它属性值有:
值 | 描述 |
---|---|
application/x-www-form-urlencoded | 在发送前编码所有字符(默认) |
multipart/form-data |
不对字符编码。 在使用包含文件上传控件的表单时,必须使用该值。 |
text/plain | 空格转换为 "+" 加号,但不对特殊字符编码。 |