繁体   English   中英

在Python 3.4上使用StringIO

[英]Using StringIO With Python 3.4

所以现在我正在使用python 3.4我的代码无法正常工作。 我是从cStringIO导入的,现在我已修复它遇到了意外错误。

这是我的错误:

Traceback:
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/core/handlers/base.py" in get_response
  111.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/contrib/admin/options.py" in wrapper
  567.                 return self.admin_site.admin_view(view)(*args, **kwargs)
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/utils/decorators.py" in _wrapped_view
  105.                     response = view_func(request, *args, **kwargs)
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/views/decorators/cache.py" in _wrapped_view_func
  52.         response = view_func(request, *args, **kwargs)
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/contrib/admin/sites.py" in inner
  204.             return view(request, *args, **kwargs)
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/contrib/admin/options.py" in add_view
  1437.         return self.changeform_view(request, None, form_url, extra_context)
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/utils/decorators.py" in _wrapper
  29.             return bound_func(*args, **kwargs)
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/utils/decorators.py" in _wrapped_view
  105.                     response = view_func(request, *args, **kwargs)
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/utils/decorators.py" in bound_func
  25.                 return func.__get__(self, type(self))(*args2, **kwargs2)
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/db/transaction.py" in inner
  394.                 return func(*args, **kwargs)
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/contrib/admin/options.py" in changeform_view
  1388.                 self.save_model(request, new_object, form, not add)
File "/home/callumb/webapps/photo/lib/python3.4/Django-1.7-py3.4.egg/django/contrib/admin/options.py" in save_model
  1029.         obj.save()
File "/home/callumb/webapps/photo/app/images/models.py" in save
  77.       self.create_thumbnail()
File "/home/callumb/webapps/photo/app/images/models.py" in create_thumbnail
  50.     image = Image.open(StringIO(self.image.read()))

Exception Type: TypeError at /admin/images/image/add/
Exception Value: initial_value must be str or None, not bytes

这是代码:

def create_thumbnail(self):

   if not self.image:
        return

    from PIL import Image
    from io import StringIO, BytesIO
    from django.core.files.uploadedfile import SimpleUploadedFile
    import os

    THUMBNAIL_SIZE = (280, 600)
    DJANGO_TYPE = self.image.file.content_type
    if DJANGO_TYPE == 'image/jpeg':
        PIL_TYPE = 'jpeg'
        FILE_EXTENSION = 'jpg'
    elif DJANGO_TYPE == 'image/png':
        PIL_TYPE = 'png'
        FILE_EXTENSION = 'png'

    image = Image.open(StringIO(self.image.read()))
    image.thumbnail(THUMBNAIL_SIZE, Image.ANTIALIAS)

    temp_handle = StringIO()
    image.save(temp_handle, PIL_TYPE)
    temp_handle.seek(0)

    suf = SimpleUploadedFile(os.path.split(self.image.name)[-1],
            temp_handle.read(), content_type=DJANGO_TYPE)
    self.thumbnail.save(
        '%s_thumbnail.%s' % (os.path.splitext(suf.name)[0], FILE_EXTENSION),
        suf,
        save=False
    )

追溯告诉您StringIO需要一个字符串,但是您正在提供字节。 使用BytesIO而不是os StringIO

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM