Loading

26.-文件上传

一、上传规范-前端[HTML]
文件上传必须为POST提交方式
表单<from>中文件上传时必须带有enctype = 'multipart/form-data'时才会包含文件内容数据
表单中用<input type="file" name = "xxx">标签上传文件
<form action="/test_upload" method="post" enctype="multipart/form-data">
    <p><input type="text" name="title"></p>
    <p><input type="file" name="myfile"></p>
    <p><input type="submit" value="上传"></p>

</form>

 

 
二、上传规范-后端[Django]
视图函数中,用request.FILES取文件框的内容
file = request.FILES['xxx']
说明:
1.FILES的key对应页码中file框的name值
2.file 绑定文件流对象
3.file.name 文件名
4.fille.file  文件的字节流数据

 

 
 
配置文件的访问路径和存储路径
在settings.py中设置MEDIA相关配置,Django把用户上传的文件,统称为media资源
MEDIA_URL = '/media/'  # 路由标识 
MEDIA_ROOT = os.path.join(BASE_DIR,'media')  #media文件夹路径

 

MEDIA_URL和MEDIA_ROOT需要手动绑定
在主路由绑定
等价于做了MEDIA_URL开头的路由,Django接到该特征请求后取MEDIA_ROOT下查找资源
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

 

 
 
三、文件写入
除了传统的open方式,还可以借助ORM实现
建表时字段:FILEFIELD(upload='子目录名')
#模型类
class Content(models.Model):
    title = models.CharField('文章名字', max_length=11)
    picture = models.FileField(upload_to='picture')   # 指明资源上传到media文件夹下哪个子目录,没有文件夹会自动创建

 

 
#视图
def test_upload(request):
    if request.method == 'GET':
        return render(request, 'test_upload.html')
    if request.method == 'POST':
        title = request.POST['title']
        myfile = request.FILES['myfile']
        Content.objects.create(title=title, picture=myfile)
        return HttpResponse('上传成功')

 

 
#表单
<form action="/test_upload/" method="post" enctype="multipart/form-data">
    <p><input type="text" name="title"></p>
    <p><input type="file" name="myfile"></p>
    <p><input type="submit" value="上传"></p>
</form>

 

 

posted @ 2022-01-12 12:40  木子七  阅读(33)  评论(0编辑  收藏  举报