Django框架中的文件上传

文件上传三要素:

  1. 提交方式 必须是post
  2. enctype 必须是 multipart/form-data
  3. 标签类型必须是 file类型。

文件上传的步骤:

第一步:在模板文件中,创建一个form表单,需要特别注意的是,在有文件上传的form表单中,method属性必须为post,而且必须指定它的enctypemultipart/form-data,表明不对字符进行编码,具体的代码如下:

<!DOCTYPE html>
{% load static %}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form action="/app01/laowang2/"     method="post"  enctype="multipart/form-data">
    {% csrf_token %}//防跨站请求伪造(钓鱼网站)
    <p>
        用户名:<input type="text" name="uername">
    </p>
    <p>
        头像:<input type="file" name="picture">
    </p>

    <p>
        <input type="submit" value="上传">
    </p>
<img src="{% static image %}" alt="图片" width="200px" height="150px">
</form>
</body>
</html>

第二步:最重要的是,在视图函数中做处理,才可以实现任何格式文件的上传:

def upload_file(request):
    if request.method=='POST':
        #获取普通字段
        uesename=request.POST.get('username')
        # 获取上传内容
        print(request.FILES)
        # 上传思路:获取上传的图片的对象,然后写到本地
        # 现在,要获取图片的名称,保存到服务器,使用原图片名称
        img_obj=request.FILES['picture']#获取上传文件对象
        print(img_obj)#返回的是对象,不是图片名称自字符串
        img_name=request.FILES['picture'].name#获取上传图片名称
        print(img_name)
        #读取上传文件中的内容,然后保存到服务器上。
        path='static/'+ img_name
        with open(path,mode="wb")as f:
            for content in img_obj.chunks():#读取上传中的内容
                f.write(content)

        return render(request,'app01/laowang2.html',{'image':img_name})
    return render(request, 'app01/laowang2.html')

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

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

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

3.img_obj.multiple_chunks():这个方法根据myFile的大小,返回True或者False,当myFile文件大于2.5M(默认为2.5M,可以调整)时,该方法返回True,否则返回False
4. myFile.name:这是一个属性,不是方法,该属性得到上传的文件名,包括后缀,如123.exe;

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

第三步:设置 urls.py 文件,指定相应的视图函数进行处理

from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [ path('laowang2/',views.upload_file),]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值