文件上传

发布时间 2023-11-06 15:53:16作者: 可可eleven

关于文件上传

修改myproject/myproject/urls.py 

添加路由

 # 上传文件
    path('upload/list/', upload.upload_list),

新建myproject/app01/views/upload.py

from django.shortcuts import render, HttpResponse

def upload_list(request):
    if request.method == "GET":
        return render(request, 'upload_list.html')
    print(request.POST) #请求中的数据
    print(request.FILES) #请求发过来的文件
    return HttpResponse("...")

新建myproject/app01/templates/upload_list.html

{% extends 'layout.html' %}

{% block content %}
    <div class="container">
        <form method="post" enctype="multipart/form-data">
            {% csrf_token %}
            <input type="text" name="username">
            <input type="file" name="avatar">
            <input type="submit" value="提交">
        </form>
    </div>
{% endblock %}

注意:

不添加 enctype="multipart/form-data"得到的是<QueryDict: {'csrfmiddlewaretoken': ['OeDA7cKmsOLEneNjULy6Isg0hn6GazDOYkLHPrfHrHOLMuLzNNMRuhENQASgz8o9'], 'username': ['123'], 'avatar': ['20200119123801_bjxpj.jpg']}>文件那返回的是文件名的字符串,并不是文件
添加 enctype="multipart/form-data"得到的是<QueryDict: {'csrfmiddlewaretoken': ['TNDydKrOMZ6Vcn6jdhrEhs34WSR1fMEZ3TLFVZW9LS92BD4z6jFp3hrRv5DBElpk'], 'username': ['222']}><MultiValueDict: {'avatar': [<InMemoryUploadedFile: 20200119123801_bjxpj.jpg (image/jpeg)>]}>

   添加后才能得到文件

修改myproject/app01/views/upload.py

from django.shortcuts import render, HttpResponse

def upload_list(request):
if request.method == "GET":
return render(request, 'upload_list.html')
# print(request.POST) #请求中的数据
# print(request.FILES) #请求发过来的文件

# 声明图片的对象
file_object = request.FILES.get("avatar")

# 分块进行存储
# file_object.name 表示图片上传时图片本身是什么名字,保存图片时就用什么名字
f = open(file_object.name, mode='wb')
for chunk in file_object.chunks():
f.write(chunk)
f.close()

return HttpResponse("上传成功")