Django图片上传和访问

Django图片上传和访问

配置:

nginx+Django

1. 图片上传

1.1 settings.py

1
2
3
4
5
6
7
8
9
10
11
12
13
# closetUsers/settings.py
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/
# 收集Django的静态文件到同一个static中
STATIC_ROOT = os.path.join(BASE_DIR, "static/")

STATIC_URL = '/static/'

MEDIA_ROOT = os.path.join(STATIC_ROOT, "media/")
MEDIA_URL = '/media/'

IMG_ROOT = os.path.join(STATIC_ROOT, "img")
IMG_URL = 'img/'

1.2 views.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# users/views.py
# 上传图片到静态文件的文件夹
@csrf_exempt
def upload_img(request):

if request.method == 'POST':
img = request.FILES.get('file', None)
if not img:
return JsonResponse(data={"msg": "没有上传的图片文件"}, status=status.HTTP_400_BAD_REQUEST)
# to do, 验证用户权限
if 'name' not in img:
return JsonResponse(data={"msg": "无名文件无法上传"}, status=status.HTTP_400_BAD_REQUEST)
file_path = os.path.join(settings.IMG_ROOT, img.name)
dest_img_path = open(file_path, 'wb+')
for chunk in img.chunks():
dest_img_path.write(chunk)
dest_img_path.close()
return JsonResponse(data={"msg": "图片上传成功", "url": file_path}, status=status.HTTP_202_ACCEPTED)
else:
return JsonResponse(data={"msg": "this method is not allowed"}, status=status.HTTP_405_METHOD_NOT_ALLOWED)

1.3 urls.py

1
2
# users/urls.py
path('upload/', views.upload_img),

2. 图片访问

所有访问静态文件都可以使用该方法,图片访问为只读请求,不需要经过用户认证等权限处理,使用该方法的好处是不需要经过django的进一步处理,减轻服务器的压力。

修改nginx.conf配置文件,添加一下部分

1
2
3
location /img {
alias /home/projects/closet/closetUsers/tempPhotos; #存放图片的文件夹路径
}

访问方式:http://120.76.62.132/img/tank_sample_4.jpeg

403Forbbien

alwasy 404

给咱来个🍰,啾咪