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

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

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

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

1回答

2187閲覧

djangoで作成したAPIでbase64でエンコードしたファイルのurlを返す方法。

noobman

総合スコア1

Django

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

1クリップ

投稿2021/05/12 07:56

発生している問題

djangoとVueで作成したアプリをherokuにデプロイしたのですが、djangoモデルのimagefieldに保存された画像ファイルのurlをbase64でエンコードしたデータをvueに渡そうとすると500 Internal server errorとなってしまいます。
開発環境では問題なく動いていたのですが、本番環境ではこのようなエラーが出てしまいました。
エラーを発生させることなくdjangoAPIからvueへデータを渡すにはどうすればいいでしょうか。
回答お願いします。

該当のソースコード

以下がdjangoのモデルです。

class Post(models.Model): """投稿モデル""" picture = models.ImageField( upload_to='posts/', verbose_name='画像', validators=[FileExtensionValidator(['jpeg', 'jpg'])], null=True, )   @property def picture_url(self): with open(self.picture.path, 'rb') as f: data = f.read() encode_data = base64.b64encode(data) return "data:image/jpeg;base64,{}".format(encode_data.decode())

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

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

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

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

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

guest

回答1

0

自己解決

原因は本番環境でのメディアファイルのストレージをAmazonS3にしていたことで、base64エンコードは問題ではありませんでした。
AmazonS3ではself.picture.pathが正しく参照できておらず、私の場合上記のコードは本番環境ではうまく機能しなかったので、とりあえず下記の方法で対処しました。
また、S3にバケットポリシーを正しく指定していないとエラーが発生するようです。

   @property  def picture_url(self): if settings.DEBUG: with open(self.picture.path, 'rb') as f: data = f.read() encode_data = base64.b64encode(data) else: import requests r = requests.get(self.picture.url) encode_data = base64.b64encode(r.content) return "data:image/jpeg;base64,{}".format(encode_data.decode())

投稿2021/05/13 05:43

編集2021/05/13 06:01
noobman

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問