Django文件上传
Django 实现文件上传
需求:实现文件上传
1. 基础版
代码:
urls.py
from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^upload.html$', views.upload),
]
views.py
from django.shortcuts import render,HttpResponse
# Create your views here.
import os
def upload(request):
if request.method == 'GET':
return render(request,'upload.html')
elif request.method == 'POST':
user = request.POST.get('user')
file = request.FILES.get('file_name')
f = open(file.name,'wb')
for line in file.chunks():
f.write(line)
f.close()
return HttpResponse('...')
upload.html
<!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="file_name">
<input type="submit" value="提交">
</form>
</body>
</html>
2. 增强版 Form上传(自定义上传按钮)
代码:
setting.py
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static'),
)
urls.py
from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^upload.html$', views.upload),
]
views.py
from django.shortcuts import render,HttpResponse
from django.forms import fields
from django import forms
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']
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('...')
upload.html
<!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>
注:页面上大部分上传按钮都可以采用这种方式解决
运行效果:


浙公网安备 33010602011771号