1、settings配置
STATIC_URL = '/staticfiles/'
# STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR,'static'),)
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'staticfiles/files')
在我们的项目中创建 staticfiles 文件夹
假如这里文件路径不太懂的,可以看我的文章如何访问静态文件
2、settings里的urls配置
注意:我是新建app!!
python3 manage.py startapp agent
from django.conf.urls import url,include
from django.contrib import admin
from . import settings
from django.views.static import serve
urlpatterns = [
url(r'^agent/',include('agent.urls')),
url(r'^staticfiles/(?P<path>.*)$',serve, {'document_root': settings.STATIC_ROOT}),
]
3、views配置(app:agent中的视图函数)
首先是在浏览器地址栏输入 127.0.0.1:8000/agent/upload
然后会有界面出来,然后根据提示上传信息
a_file.name 文件名
a_file.file 文件的字节流数据
from django.shortcuts import render
from django.http import HttpResponse, Http404
from django.http import JsonResponse
from django.conf import settings
import os
def upload(request):
if request.method == 'GET':
return render(request, 'agent/upload.html')
elif request.method == "POST":
try:
# 设置允许上传的文件格式
ALLOW_EXTENSIONS = ['png', 'jpg', 'jpeg']
# 接收文件
a_file = request.FILES['myfile']
# 判断文件格式
if a_file.name.split('.')[-1] in ALLOW_EXTENSIONS:
print("上传文件名是:", a_file.name) # 文件名
print('settings.MEDIA_ROOT:', settings.MEDIA_ROOT) # 文件存放地址(文件夹地址)
if not os.path.exists(settings.MEDIA_ROOT):
os.makedirs(settings.MEDIA_ROOT)
filename =os.path.join(settings.MEDIA_ROOT, a_file.name) # 创建文件
print('filename:',filename)
img = 'files/'+ a_file.name # 文件相对路径
print('img:',img)
with open(filename, 'wb') as f:
data = a_file.file.read() # 文件的字节流数据
f.write(data)
return render(request,'agent/show.html',{"img":img})
else:
return HttpResponse("文件格式有误,请上传:png,jpg,jpeg")
except Exception as e:
print(e)
raise Http404
4、urls(app:agent中的路由)
from django.conf.urls import url
from agent import views
urlpatterns = [
# http://127.0.0.1:8000/agent/upload
url(r'^upload', views.upload), # 上传文件
]
5、templates(app:agent中的模板)
注意模板的创建位置
这个是 upload.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>上传文件</title>
</head>
<body>
<h3>上传文件</h3>
<form method="post" action="/agent/upload" enctype="multipart/form-data">
<input type="file" name="myfile"/><br>
<input type="submit" value="上传">
</form>
</body>
</html>
这个是 show.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>展示图片</title>
</head>
<body>
{% load static %}
<h2>不好</h2>
<img src="{% static img %}">
</body>
</html>
最后
然后启动项目就可以运行了~
其他方式:使用postman这个软件
使用这个软件就可以不用写html~
可能post完,图片没有显示,但是终端请求是正常的~ 终端打印的信息,是我上面视图函数调试打印的
若哪里不合适,请评论,一起探讨~
附加:
批量上传图片:
首先批量上传是前端将一堆图片转换成一个base64的数组,将数组传给后端,后端对数据进行解析,然后 with open 打开,write写(‘wb’)
或者,直接给后端一个base64数据包,进行解析,写文件~
要么就一次一次post,传图片 ~ 半自动 哈哈哈哈
如果有更好的方法,请评论,一起探讨 ~
上传文件保存在指定文件夹中
from django.shortcuts import render
from django.http import HttpResponse, Http404
from django.http import JsonResponse
from django.conf import settings
import os
def upload(request):
if request.method == 'GET':
try:
return render(request, 'agent/upload.html')
except Exception as e:
print(e)
elif request.method == "POST":
try:
# 设置允许上传的文件格式
ALLOW_EXTENSIONS = ['png', 'jpg', 'jpeg']
# 接收文件
a_file = request.FILES['myfile']
# 接收文件夹名字
a_filename = request.POST['filename']
# 判断文件格式
if a_file.name.split('.')[-1] in ALLOW_EXTENSIONS:
# 判断文件夹是否存在,不存在就创建
if not os.path.exists("/home/tarena/图片/" + a_filename):
os.makedirs("/home/tarena/图片/" + a_filename)
# 在框架外的别的地方存文件
with open("/home/tarena/图片/" + a_filename + a_file.name, 'wb') as f:
data = a_file.file.read() # 文件的字节流数据
f.write(data)
return HttpResponse("接收文件:" + a_file.name + "成功")
else:
return HttpResponse("文件格式有误,请上传:png,jpg,jpeg")
except Exception as e:
print(e)
raise Http404