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

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

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

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

Python 3.x

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

Q&A

解決済

1回答

3880閲覧

Djangoの、File, open()メソッドのerrorについて

yassyskywalker

総合スコア14

Django

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

Python 3.x

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

0グッド

0クリップ

投稿2016/10/13 23:14

###前提・実現したいこと
django1.8.4,python3.4.3 で、画像のダウンロード配信ができるようなサイトを勉強がてら作成中です。
model A にアップロードした画像が、自動的に、model Bにも保存されるような機能をつけたいと考えております。

###発生している問題・エラーメッセージ

imageフィールドに、Fileとopenメソッドを利用して、model A にアップした画像をmodel Bにコピーしようとしたところ、UnicodeDecodeError が出力され、うまく処理ができませんでした。

UnicodeDecodeError at /admin/originals/original/add/ 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

###該当のソースコード

該当のソースコードは以下の通りです。
Original -> post_save -> ImageProcessedに保存 という流れを想定しております。

python

1def image_upload_to_originals(instance, filename): 2 slug = instance.slug 3 basename, file_extension = filename.split(".") 4 basename = slugify(basename) 5 new_filename = "org-%s-%s.%s" %(slug, basename, file_extension) 6 return "originals/%s/%s" %(slug, new_filename) 7 8class Original(models.Model): 9 title = models.CharField(max_length=120) 10 slug = models.SlugField(blank=True, unique=True) 11 image = models.ImageField(upload_to=image_upload_to_originals) 12 13 def __str__(self): 14 return self.title 15 16def image_upload_to_processed(instance, filename): 17 basename, file_extension = filename.split(".") 18 basename = slugify(basename) 19 new_filename = "%s.%s" %(basename, file_extension) 20 return "processed/%s" %(new_filename) 21 22class ImageProcessed(models.Model): 23 original = models.ForeignKey(Original) 24 image = models.ImageField(upload_to=image_upload_to_processed, blank=True, null=True) 25 26 def __str__(self): 27 return self.original.title 28 29import os 30from PIL import Image 31import random 32 33from django.core.files import File 34 35def original_post_save_receiver(sender, instance, *args, **kwargs): 36 obj, obj_created = ImageProcessed.objects.get_or_create(original=instance) 37 F = open(instance.image.path, "r") 38 mono.image.save("newfilename.jpg", File(F)) 39 mono.save() 40 41post_save.connect(original_post_save_receiver, sender=Original) 42

###試したこと

  • open (instance.image.path, "w")にしてみましたが、not readable というerrorが出てしまいやはり上記の箇所で処理が止まってしまいます。

  • また、open (instance.image.url, "w")などもためしてみましたが、こちらでは、[Errno 2] No such file or directory のようなerrorが出てしまいます。

何卒よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

python

1F = open(instance.image.path, "rb")

だとどうですか。

投稿2016/10/14 10:07

toritoritorina

総合スコア972

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

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

yassyskywalker

2016/10/14 12:53

ありがとうございます!ご指摘の通り、rbに変更したところ無事解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問