69
75

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Django] ファイルアップロード機能の使い方 [クラウドストレージ編]

Last updated at Posted at 2018-06-28

この記事について

前回「基本設定編」に続き Django のファイルアップロード機能(FileField、ImageField)の使い方の解説です。今回は django-storages の使い方を Amazon S3 を例に説明します。

参考

django-storages について

django-storagesはクラウドストレージをメディアファイルの保存先に使うためのパッケージです。

django-storages 公式:github/gitdocs

対応するストレージサービス等は以下の通りです

  • Amazon S3
  • Azure Storage
  • DropBox
  • Google Cloud Storage
  • Apache Libcloud
  • FTP/SFTP

Amazon S3 での動作

django-storagesを利用するとメディアファイルのURLと保存先は以下の様になります。URLはAmazon S3より直接参照するものになります。

ファイルの保存先の基点 ファイルのURLの基点
非利用時 MEDIA_ROOT MEDIA_URL
利用時 Amazon S3 バケット Amazon S3 バケットのURL

※django-storages利用時、MEDIA_ROOTとMEDIA_URLの設定は動作に影響を与えません。

セキュリティ対応

デフォルトの動作では、メディアファイルのURLはAmazon S3 の「署名付きURL発行機能(Pre-Signed URL)」を使って有効期限を付けたものになります。一定時間後(※)にアクセス不能になるURLなので、URL流出の心配はありません。

参考:S3にて Pre-Signed URLを発行する

逆にURLをパーマリンクとして使いたい場合は、バケットをパブリックアクセス可能にしたうえで設定「AWS_S3_CUSTOM_DOMAIN」にバケットのURL(もしくはRoute53で取得した独自ドメイン)を指定してください。署名付きURLではなくパーマリンクになります。

※有効期限はデフォルトで1時間(3600)。AWS_QUERYSTRING_EXPIREで変更可能。

設定手順

1.Amazon上の設定

クラウド上で以下の設定を終えてください。

  • Amazon S3にバケットを作成する。
  • Amazon IAMでユーザーを作成する。
  • Amazon IAMでグループを作成し「AmazonS3FullAccess」またはカスタムポリシーを作ってグループに割り当てる。
  • 作成したユーザーをグループに所属させる。

英語ですがこちらのサイトに詳しい作業手順があります。

Djangoの接続設定として以下の情報を使います。

  • ユーザーのアクセスキー
  • ユーザーのシークレットキー
  • バケット名

2.django-storagesのインストール

プロジェクトに「django-storages」と「boto3(Python用 Amazon SDK)」をインストールします。

コマンド
pip install django-storages
pip install boto3

3.django-storagesの設定

設定ファイルにdjango-storagesを利用するための設定と1で控えておいたアクセスキー等を設定します。

settings.py
INSTALLED_APPS = (
    ...
    'storages',
    ...
)

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

AWS_ACCESS_KEY_ID = 'Your Access Key ID'
AWS_SECRET_ACCESS_KEY = 'Your Secret Key'
AWS_STORAGE_BUCKET_NAME = 'bucket name'

これで設定完了です。

ファイルアップロードを試すと、ファイルがAmazon S3上に保存されることが確認できると思います。django-storagesではさらにキャッシュやファイル圧縮、同名ファイルアップロード時の動作の設定が可能です。詳しくは公式ドキュメントを参考にしてください。

69
75
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
69
75

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?