django文件上传及接收存储

时间:2021-07-26 23:58:34 类型:python
字号:    

django文件上传及接收存储的方法如下:

1, 表单:

<form action="/student/addsave" method="post" class="form" enctype="multipart/form-data">
     {% csrf_token %}
    <li>
        <input type="file" name="file">
    </li>
    <li>
        <input type="submit" value="保存">
    </li>
</form>

2, view接收

myFile = request.FILES["file"]
if myFile:
    list = myFile.name.split(".")
    ext  = list[-1]
    newname = uuid.uuid1().hex + "." + ext
    ext_tup = ("gif","png","jpeg","jpg")
    if ext not in ext_tup:
        return HttpResponse("<script>alert('只能上传图片');history.back();</script>")
    path = makedirs()
    imgname = '%s/%s' % (path, newname)
    destination =  open(imgname,'wb+')
    for chunk in myFile.chunks():
        destination.write(chunk)

处理上传的文件

关于上传文件的方法和属性:


    myFile.read():从文件中读取整个上传的数据,这个方法只适合小文件;


    myFile.chunks():按块返回文件,通过在for循环中进行迭代,可以将大文件按块写入到服务器中;


   myFile.multiple_chunks():这个方法根据myFile的大小,返回True或者False,当myFile文件大于2.5M(默认为2.5M,可以调整)时,该方法返回True,否则返回False,因此可以根据该方法来选择选用read方法读取还是采用chunks方法:


      if myFile.multiple_chunks() == False:


         # 使用myFile.read()


      else:


         # 使用myFile.chunks()


   myFile.name:这是一个属性,不是方法,该属性得到上传的文件名,包括后缀,如123.exe;


   myFile.size:这也是一个属性,该属性得到上传文件的大小。


相关链接: 生成年月日目录函数

<