Django之文件上传
-
一、文件上传方法
views.py:文件相关内容保存在 request.FILES 里
from django.shortcuts import render, HttpResponse, redirect # Create your views here. def upload(request): if request.method == 'GET': return render(request, 'upload.html') else: user = request.POST.get('user') img = request.FILES.get('img') # img是对象(包括文件大小,文件名称,文件内容。。) print(img.name) # 文件名称 print(img.size) # 文件大小 # 保存上传过来的文件到服务端 f = open(img.name, 'wb') for line in img.chunks(): # 分块接收上传的文件 f.write(line) f.close() return HttpResponse('ok')
upload.html:form表单里需要写上 enctype="multipart/form-data"
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/upload.html" method="post" enctype="multipart/form-data"> {% csrf_token %} <input type="text" name="user"> <input type="file" name="img"> <input type="submit" value="提交"> </form> </body> </html>
-
二、自定义页面上传按钮
将上传按钮的 input 标签和要自定义的 a 标签或者 img 标签放到同一个 div 标签下,然后通过对 div 进行 relative 定位,
input 标签进行 absolute 定位和透明度设置 —> style="opacity: 0; position: absolute;top: 0;left: 0;"
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/upload.html" method="post" enctype="multipart/form-data"> {% csrf_token %} <input type="text" name="user"> <div style="position: relative"> <a>自定义上传样式</a> <input type="file" name="img" style="opacity: 0; position: absolute; top: 0; left: 0;"> </div> <input type="submit" value="提交"> </form> </body> </html>
-
三、基于 Form 组件进行上传
上传的内容保存在 cleaned_data 的 上传文件的字段键名里
from django.shortcuts import render, HttpResponse, redirect # Create your views here. from django import forms from django.forms import fields class UploadForm(forms.Form): user = fields.CharField() img = fields.FileField() def upload(request): if request.method == 'GET': return render(request, 'upload.html') else: obj = UploadForm(request.POST, request.FILES) if obj.is_valid(): user = obj.cleaned_data['user'] img = obj.cleaned_data['img'] # img是对象(文件大小,文件名称,文件内容。。) print(img.name) # 文件名 print(img.size) # 文件大小 f = open(img.name, 'wb') for line in img.chunks(): f.write(line) f.close() return HttpResponse('ok')

浙公网安备 33010602011771号