2016-06-26 7 views
-1

Pythonでターミナルで動作します「_io._IOBase」オブジェクトの「FILENOは」引数
例外場所を必要とする:/usr/lib/python3/dist-packages/PIL/ImageFile.pyを_saveに、ライン454

これは私がテストしたコードです端末内 -のpython3 Django1.9 PILの問題はなく、サーバー

import urllib.request 
from PIL import Image 
from io import BytesIO 

url = 'http://s.inyourpocket.com/gallery/108367.jpg' 
i = Image.open(BytesIO(urllib.request.urlopen(url).read())) 
img_file = BytesIO() 
i.save(img_file, 'JPEG') 

コードは、端末で完璧に動作しますが、すぐにそれはDjangoのサーバー上でテストだとして、それは私にこれらのエラーを与える -

File "PATH/utils.py", line 124, in pil_to_django 
    image.save(img_file, 'JPEG') 
File "/usr/lib/python3/dist-packages/PIL/Image.py", line 1468, in save 
    save_handler(self, fp, filename) 
File "/usr/lib/python3/dist-packages/PIL/JpegImagePlugin.py", line 579, in _save 
    ImageFile._save(im, fp, [("jpeg", (0,0)+im.size, 0, rawmode)], bufsize) 
File "/usr/lib/python3/dist-packages/PIL/ImageFile.py", line 454, in _save 
    fh = fp.fileno() 
TypeError: descriptor 'fileno' of '_io._IOBase' object needs an argument 

サーバーで実行されているコードは、views.pyから呼び出されutils.pyであります -

# utils.py 
def pil_to_django(image, format="JPEG"): 
    img_file = io.BytesIO 
    image.save(img_file, 'JPEG') 
    return ContentFile(img_file.getvalue()) 


# views.py 
pil_image = Image.open(BytesIO(urllib.request.urlopen(url).read())) 
django_file = pil_to_django(pil_image) 

答えて

0

BytesIOクラスをインスタンス化するのを忘れました。 img_file = io.BytesIOimg_file = io.BytesIO()