文件上传的使用场景
- 用户可以通过浏览器将图片等文件上传至网站
- 用户上传头像、上传PDF、TXT等文件
上传规范 -前端HTML
文件上传必须以Post
的方式进行提交,表单<form>
中的文件上传时候必须带有enctype="multipart/form-data"
时候 才会包含文件内容数据。
表单单重使用<input type="file" name="xxx">
进行上传文件
上传规范 -后端
试图函数中,用request.FILES
取文件框里的内容
file=request.FILES['xxx']
- FILES的
key
对应页面file框中的name
的值 - file绑定文件流对象
- file.name 文件名
- file.file文件的字节流数据
配置文件的访问路径和存储路径,在setting.py
中设置MEDIA相关配置,Django把用户上传的 资源统称为media资源。
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
MEDIA_URL
和MEDIA_ROOT
需要手动绑定
# 在主路由当中
from django.contrib import admin
from django.urls import path,include
from index import views as index_views
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('user/',include('user.urls')),
path('note/',include('note.urls')),
path('index/',index_views.index_views)
]
urlpatterns = static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
等价于做了MEDIA_URL
开头的路由,Django接到请求MEDIA_URL
后去MEDIA_ROOT
查找资源
文件写入方案:借助ORM操作
字段:FileField(upload='子目录名')
# 先创建一个模型类
from django.db import models
class Upload_info(models.Model):
filename = models.CharField(verbose_name="文件名称",max_length=11)
picture = models.FileField(upload_to='files')
代码语言:javascript复制# 上传文件的视图函数
def upload_views(request):
if request.method == 'GET':
return render(request,'user/upload.html')
elif request.method == 'POST':
# 取上传文件的名字
title = request.POST['title']
up_file = request.FILES['file']
Upload_info.objects.create(title=title,picture=up_file)
return HttpResponse("文件上传成功")