728x90
장고에서 사용자에게 이미지 파일을 받아서 저장할 경우 저장 공간을 s3 bucket으로 설정하는 법을 알아보자.
우선 s3 bucket을 만들자
버킷은 만들어 졌고 IAM 설정을 하자
마지막에 나오는 키 값만 csv파일로 저장하거나 메모장에 적어둔다.
이 후 장고 설정에 쓰인다.
이제 장고에서 설정을 해보자 다음 사항을 설치해준다.
pip inastall django-storages
pip install boto3
settings.py를 수정한다.
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
위 코드를 추가 하고
AWS_ACCESS_KEY_ID = AWS_ACCESS_KEY_ID (아까 IAM에서 받은 거)
AWS_SECRET_ACCESS_KEY = AWS_SECRET_ACCESS_KEY (아까 IAM에서 받은 거)
AWS_REGION = 'ap-northeast-2'
AWS_STORAGE_BUCKET_NAME = '버킷이름(문자열로)'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.%s.amazonaws.com' % (AWS_STORAGE_BUCKET_NAME,AWS_REGION)
DATA_UPLOAD_MAX_MEMORY_SIZE = 1024000000 # value in bytes 1GB here
FILE_UPLOAD_MAX_MEMORY_SIZE = 1024000000
DEFAULT_FILE_STORAGE = 'core.storages.MediaStorage'
STATICFILES_STORAGE = 'core.storages.StaticStorage'
MEDIAFILES_LOCATION = 'media'
STATICFILES_LOCATION = 'static'
위 코드도 추가한다.
core앱을 만들거나 util앱을 만든다.
from django.conf import settings
from storages.backends.s3boto3 import S3Boto3Storage
class MediaStorage(S3Boto3Storage):
location = settings.MEDIAFILES_LOCATION
file_overwrite = False
class StaticStorage(S3Boto3Storage):
location = settings.STATICFILES_LOCATION
file_overwrite = False
strages.py파일에 위 코드를 추가해준다.
이제 이미지 저장을 해보자
from django.shortcuts import render
from .models import ProductImage, Product
from django.http import JsonResponse
# Create your views here.
def show_img(request):
if request.method == 'POST':
img = request.FILES.get('img-file')
product = Product.objects.get(id=1)
ProductImage.objects.create(product=product ,image_url=img)
return JsonResponse({'MESSAGE': 'success'}, status=200)
if request.method == 'GET':
a = Product.objects.get(id=1)
result = {
'url':[i.image_url.url for i in a.productimage_set.all()]
}
return JsonResponse({'MESSAGE': 'success', 'result':result}, status=200)
else:
return JsonResponse({'MESSAGE': 'fail'}, status=400)
아무 view파일에 적어주고
위 함수를 실행할 수 있게 url,py설정을 해준다.
포스트맨에서 body에 form-data에 키값 설정하고 파일을 첨부하고 send를 누르면!
샐리.jpg가 저장이 됐다.