###前提・実現したいこと
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が出てしまいます。
何卒よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/14 12:53