0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[2025年最新]Django最新バージョンでAWS S3に画像を保存する方法(備忘録)

Last updated at Posted at 2025-01-20

Django最新バージョンでAWS S3に画像を保存する方法2025年版(備忘録)

初投稿です:relaxed:

勉強がてらにDjangoでPWAアプリを作る中で、画像をAWS S3に保存してみようと思い挑戦しますが、日本語での情報が少ないことと、ChetGPTが今回のトピックで使い物にならず(古い情報ばかり)、かなりの時間を費やしたのでやり方を共有しておきたいと思います!
最後のほうに参考にしたページを張っておきます!(結局公式ドキュメント見れば一発)

Django4.2以降は書き方が変わったらしい

以前の書き方

# settings.py

AWS_STORAGE_BUCKET_NAME = S3のバケット名
AWS_S3_REGION_NAME = バケットのリージョン

AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')

"""ここが問題!!!!"""
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
"""!!!!!!"""

[重要]新しいバージョンのDjangoでの書き方

STORAGES = {
    "default": {
        "BACKEND": "storages.backends.s3boto3.S3Boto3Storage",
        "OPTIONS": {
            "bucket_name": "your-bucket-name",
            "access_key": "your-access-key",
            "secret_key": "your-secret-key",
            "location": "media/images",  # ここでディレクトリを指定
        },
    },
    "staticfiles": {
        "BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage",
    },
}

前までDEFAULT_FILE_STORAGEで指定していたストレージエンジンをSTORAGESに書きます

実際に動いたコードです↓2025/1/20現在

import os
from dotenv import load_dotenv

load_dotenv()

"""AWS S3の設定"""
AWS_ACCESS_KEY_ID = os.getenv('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.getenv('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.getenv('AWS_STORAGE_BUCKET_NAME')
AWS_S3_REGION_NAME = os.getenv('AWS_S3_REGION_NAME')
AWS_S3_SIGNATURE_VERSION = 's3v4'

STORAGES = {
    # メディアファイルはS3ストレージ
    "default": {
        "BACKEND": "storages.backends.s3.S3Storage",
        "OPTIONS": {
            "location": "media/images", 
        },
    },
    # 静的ファイルはローカルストレージ
    "staticfiles": {
        "BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage",
    },
}
MEDIA_URL = f"https://{AWS_STORAGE_BUCKET_NAME}.s3.{AWS_S3_REGION_NAME}.amazonaws.com/media/"


# """古のMedia設定 Django ver.4.2以降からはSTORAGESでないと動かない"""
# MEDIA_URL = "/media/"
# MEDIA_ROOT = os.path.join(BASE_DIR, "media")
#DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

"""Staticの設定"""
STATIC_URL = "/static/"
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'frontend', 'static'),
]

今回やりたかったこと

画像だけS3に保存して、Static(cssやjs、PWAで使用するjsonなど)はローカルで管理したいと思っていました。

参考にしたサイト

↓公式ドキュメント
https://docs.djangoproject.com/en/4.2/ref/settings/#std-setting-STORAGES

↓STORAGESをきれいに書くには?的な議論
https://forum.djangoproject.com/t/storage-4-2-how-to-subclass-default/29190/3

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?