Django文件上传
-
定义:用户可以通过浏览器将图片等文件传至网站
-
场景:用户上传头像,上传流程性的文档[pdf, txt等]
前端HTML处
文件上传必须为POST提交方式
表单<form>中文件上传时必须有带有
enctype= "multipart/form-data"时才会包含文件内容数据。
表单中用<input type="file" name="xx">标签上传文件
enctype= “multipart/form-data” 还是可以支持input type=”text”的
后端Django处
视图函数中,用 request.FILES取文件框的内容 (PS:如果有POST TEXT等数据一起进来的话还是要POST来取)
file=request. FILES[‘XXX’]
说明:
-
FILES的key对应页面中fle框的name值
-
file绑定文件流对象
-
file.name文件名
-
file.file文件的字节流数据
配置文件的访问路径和存储路径
在setting.py中设置MEDIA相关配置; Django把用户上传的文件,统称为media资源
Django把用户上传的文件,统称为media资源
#file : settings.py
-
MEDIA_URL = ‘/media/
-
MEDIA_ROOT = os.path.join(BASE_DIR, ‘media’)
创建media文件夹
MEDIA_URL和 MEDIA_ROOT需要手动绑定
步骤:主路由中添加路由
from django.conf import settings
from django.conf.urls.static import static
urlpatterns + static(settings. MEDIA_URL, document_root=settings. MEDIA_ROOT)
说明:等价于做了 MEDIA URL开头的路由, Django接到该特征请求后去 MEDIA ROOT路径查找资源
接收文件
文件写入方案1:
传统的open方式
@csrf_exempt
def upload_view(request):
if request.method = 'GET':
return render (request, 'test_upload.html')
elif request.method == "POST":
a_file = request.FILES ['myfile']
print("上传文件名是:", a_file.name)
filename =os.path.join(settings.MEDIA_ROOT, a_file.name)
with open(filename, 'wb') as f:
data =a_file.file.read()
f.write (data)
return HttpResponse ("接收文件:" + a_file.name + "成功")
文件写入方案2:
借助ORM;
字段:FileField(upload_to='子目录名")
@csrf_exempt
def up1oad_view_dj(request):
if request.method=='GET':
return render(request,'test_up1oad.html')
elif request.method=='POST':
title = request.POST['title']
a_file =request.FILES['myfile']
Content.objects.create(desc=tit1e,my file=a_file)
return HttpResponse(' '----upload is ok----')
Comments NOTHING