Django之上传文件

  1 urls.py中

 url(r'^upload/', views.upload),

2 views.py中

from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
# Create your views here.

@csrf_exempt
def upload(request):
    """
        保存上传文件前,数据需要存放在某个位置。默认当上传文件小于2.5M时,django会将上传文件的全部内容读进内存。从内存读取一次,写磁盘一次。
        但当上传文件很大时,django会把上传文件写到临时文件中,然后存放到系统临时文件夹中。
        :param request:
        :return:
        """
    if request.method == "POST":
        file_obj = request.FILES.get("file") # 拿到文件对象,file为页面上type=files类型input的name属性值
        print(file_obj,type(file_obj))
        # picture.png <class 'django.core.files.uploadedfile.InMemoryUploadedFile'>
        # django把上传的文件放到内存中,我们要做的事情就是把文件写到磁盘上

        # 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
        # file_obj.name表示已文件原来的名字命名文件
        with open(file_obj.name, "wb") as f:
            #从文件中一行一行的读取数据
            for line in file_obj.chunks():
                # 写入本地文件
                f.write(line)
    return render(request, "upload.html")

3 upload.html中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form action="/upload/" method="post" enctype="multipart/form-data">
    <p><input type="file" name="file"></p>
    <p><input type="submit" value="提交"></p>
</form>
</body>
</html>


<!-- form表单提交数据需要注意的事项 -->

<!-- 1 提交方式type="submit" -->
<!-- 2 所有的input标签要放到form表单里面,input标签要有name -->
<!-- 3 提交文件时需要设定form的enctype=“multipart/form-data”,并且添加<input type='file'>,而且附件只能通过submit方法进行提交 -->

 

posted @ 2020-05-03 21:55  zh_小猿  阅读(211)  评论(0编辑  收藏  举报