admin 管理员组

文章数量: 887021

表单

文件上传

1、文件上传时网站开发中非常常见的功能

2、当Django处理上传一个文件的时候,文件数据被放在request.FILES
    ⑴因此可以在视图函数中使用request.FILES来获取前端传递上来的文件数据

 

一般方法上传文件

前端代码

前端上传文件也是使用form表单和input标签。只是如果表单时用于上传文件的话,这两个表单需要特定的设置下属性,不然会造成文件无法上传等问题

例1:
⑴编辑模板

<form action="{% url 'index' %}" method="post" enctype="multipart/form-data">
    选择需要上传的文件:<input type="file" name="uploadFile">
    <input type="submit" value="提交">
</form>

注:
在模板文件中,创建一个form表单,需要特别注意的是:
    ⑴在有文件上传的form表单中,method属性必须为post
    ⑵必须指定它的enctype为"multipart/form-data",表明不对字符进行编码
    ⑶input标签的类型为file

例2:
⑴编辑模板

⑵编辑视图

注:
1、Django处理上传一个文件的时候,文件数据被放在request.FILES对象中
    ⑴因此可以在视图函数中使用request.FILES.get()来获取前端传递上来的文件数据
    ⑵request.FILES对象也是一个类字典的数据类型,因此也可以使用get()方法来根据键名来获取里面具体的值
    ⑶这里建议使用get()方法来获取,不要使用["键名"]来获取:get()方法未获取到时返回None,["键名"]未获取到时会报错

2、文件上传至服务器并保存。自己过程是
    ⑴前端将整个文件上传至服务器
    ⑵服务器获取文件并将文件里面的内容读取出来
    ⑶然后将读取出来的文件内容重新写到我们自己指定的路径文件名中:这里如果直接使用with open("abc.txt") as file的话(没有指定文件的打开路径),那么保存的文件会生成在根目录下面。因此在指定路径时使用" . "来代表当前目录,即" .  "代表工程目录(\Web),后面的路径就按着写就好了
    ⑷而不是:服务器获取文件后,将整个文件保存到指定文件(保存的是文件内容而不是整个文件) 

3、这里介绍几个关于上传文件的方法和属性:
    ⑴myFile.read():从文件中读取整个上传的数据,这个方法只适合小文件
    ⑵myFile.chunks():按块返回文件,通过在for循环中进行迭代,可以将大文件按块写入到服务器中
    ⑶myFile.multiple_chunks():这个方法根据myFile的大小,返回True或者False
        ①当myFile文件

本文标签: 表单