質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

1回答

3298閲覧

【Django-python3】AWSのs3から画像を取得できない

hiro-yuki

総合スコア8

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2016/10/19 06:09

###前提・実現したいこと
プログラミングを1年ほど前から学んでいる初心者です。
見様見真似でここまで来ているので、基本がわかっていなかったりします。
その点を考慮して教えて頂ければありがたいです。
宜しくお願い致します。

Python3.4、Django(1.9.10)を使ってwebサービスを作っています。
開発環境ではある程度納得いくものが出来たため、Herokuとs3を使用した本番環境によるテストをしようとs3の設定をしたところ画像が表示されない現象に突き当たりました。
Djangoは海外の有料動画サイトを参考に学び、s3の設定方法もそのサイト内容をそのまま参考しました。
Github-S3 Static & Media Files for Django

###該当のソースコード
開発環境のsettings.pyにおけるSTATIC、MEDIA関連設定では問題なく動いております。

STATIC_ROOT = os.path.join(BASE_DIR,'staticfiles') STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), ] MEDIA_URL = '/static/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'static','media')

これを上記URLに従ってAWSのs3に適応するよう設定したところ

ACCESS_KEY_ID = "*****" AWS_SECRET_ACCESS_KEY = "*****" AWS_FILE_EXPIRE = 200 AWS_PRELOAD_METADATA = True AWS_QUERYSTRING_AUTH = True DEFAULT_FILE_STORAGE = '*****.utils.MediaRootS3BotoStorage' STATICFILES_STORAGE = '*****.utils.StaticRootS3BotoStorage' AWS_STORAGE_BUCKET_NAME = '*****' S3DIRECT_REGION = 'us-east-1' S3_URL = '//%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME MEDIA_URL = '//%s.s3.amazonaws.com/media/' % AWS_STORAGE_BUCKET_NAME MEDIA_ROOT = MEDIA_URL STATIC_URL = S3_URL + 'static/' ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/' import datetime two_months = datetime.timedelta(days=61) date_two_months_later = datetime.date.today() + two_months expires = date_two_months_later.strftime("%A, %d %B %Y 20:00:00 GMT") AWS_HEADERS = { 'Expires': expires, 'Cache-Control': 'max-age=%d' % (int(two_months.total_seconds()), ), }

画像が表示されませんでした。
CSSは問題なく適応されています。
正しく表示されない画像のsrcを調べると

<img src="https://*****.s3.amazonaws.com:443/post/postNone/thumbnail/image.jpg?Signature=eEKbvA1...以降英数字

と表示されています。

どのように設定をすれば画像が表示されるかを教えて頂けないでしょうか。
もし回答の為の情報が足りない場合はご指摘下さい。
宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

実際に画像の置いてあるリージョンとコード中に指定してあるリージョンus-east-1はあってますか?
もし東京リージョン画像がある場合はap-northeast-1となります。

投稿2016/10/19 06:31

moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro-yuki

2016/10/19 06:47

お返事頂き誠にありがとうございます。 ご指摘の通り使用バケットのリージョンはTokyoを選択しておりましたので、S3DIRECT_REGION = 'ap-northeast-1'と変えましたが変化ありませんでした。 s3バケットのURLはhttps://console.aws.amazon.com/s3/home?region=us-east-1&bucket=*****&prefix= となっておりますが関係は無いのでしょうか。 他に可能性のある修正ポイントがあればご連絡願います。 宜しくお願い致します。
moonphase

2016/10/19 07:05

Consoleのアドレスは私の環境でもregion=us-east-1でしたので、関係ないかと思います。 awscliで対象ファイルは見えてますか? aws s3 ls s3://*****/post/postNone/thumbnail/image.jpg
hiro-yuki

2016/10/19 07:33

awscliとはモジュールのことですよね? お恥ずかしながら使用方法がわからないのですが(すみません) pip installしてaws configureにて AWS Access Key ID:***** AWS Secret Access Key:****** Default region name [us-west-2]: ap-northeast-1 Default output format [None]: json と設定し、aws s3 lsとすると An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied 表示が出てしまいました。 見当違いのことをしていますでしょうか。
hiro-yuki

2016/10/19 07:44

【修正】 *実際にはimage.jpgはHokkaido-01.jpgなので以下の通りです aws s3 ls s3://*****/post/postNone/thumbnail/Hokkaido-01.jpg としたところなにも表示されませんでした。しかし、 aws s3 ls s3://*****/media/post/postNone/thumbnail/Hokkaido-01.jpg とmedia/を追加してやると 2016-10-18 11:10:25 110554 Hokkaido-01.jpg と表示されました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問