[AWS]django S 3の使い方
django s 3アップロード設定
aws s s 3 bucket作成方法の省略
iamユーザーの情報が必要です
django静的ファイル関連設定
モジュールのインストール
pip install boto3
-S 3モジュールpip install django-storages
-モジュールsettings.py設定
# django-storages를 사용하기 위해 installed apps에 storages 추가
INSTALLED_APPS = [
...
'storages',
]
# S3 설정을 위한 변수
# access key와 secret key는 본인이 생성한 iam의 정보를 사용할 것
AWS_ACCESS_KEY_ID = MY_AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY = MY_AWS_SECRET_ACCESS_KEY
AWS_REGION = 'ap-northeast-2'
AWS_STORAGE_BUCKET_NAME = 'beap-test-shop'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.%s.amazonaws.com' % (
AWS_STORAGE_BUCKET_NAME, AWS_REGION)
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
AWS_DEFAULT_ACL = 'public-read'
AWS_LOCATION = 'static'
STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
静ファイルS 3にアップロード(静ファイル収集)
./manage.py collectstatic
S 3パケット権限の設定
S3 Bucket Policy
Allow
*
djangoでboto 3を使用してファイルをアップロードする
import boto3
s3_client = boto3.client(
's3',
aws_access_key_id='my_access_key_id',
aws_secret_access_key='my_access_secret_key',
)
file = request.FILES.get('file')
# 방법1
s3_client.upload_fileobj(
file,
'my_bucket_name', # s3에 생성한 버킷 이름
's3_upload_file_name', # s3에 업로드될 경로 및 파일이름
ExtraArgs={
'ContentType': file.content_type, # file의 확장자 타입
}
)
# 방법2
s3_client.upload_file(
file,
'my_bucket_name', # s3에 생성한 버킷 이름
's3_upload_file_name', # s3에 업로드될 경로 및 파일이름
)
방법1
と방법2
の違いupload_fileobj()
の主なポイントは、ファイルオブジェクトがまずローカルディスクに格納される必要はないが、RAMにファイルオブジェクトとして表示されることである.各方法で見ることができ、upload fileobj()を使用するとurlで直接画像を表示することができます.
upload file()を使用すると、ローカルディスクに画像を保存して表示できます.
速度の観点から見ると、
방법1
の方が速い.ただし、画像拡張子(jpg、png、...)ファイルを変換してS 3に保存したい場合は、上記の方法でファイルを書き込むと、ファイルがクラッシュする場合があります.
△個人的な経験では、img→pdfファイルに変換してアップロードすると、pdfファイルが破壊され、ファイルが確認できなくなります.
私が解決する方法はdjangoプロジェクトにpdfファイルに変換して保存し、それを開いて保存することです.そして、この論理が終了すると、djangoプロジェクトで生成されたpdfファイルをクリアすることで論理を終了する.△これは有効な方法ではないようですが、今は私が実現できる方法を使っています.
Reference
この問題について([AWS]django S 3の使い方), 我々は、より多くの情報をここで見つけました https://velog.io/@conficker77/AWS-django-S3-사용-방법テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol