2

我正在使用 django-imagekit 处理上传图片,我遇到了以下错误:

AttributeError at /car/7/

'cStringIO.StringO' object has no attribute 'fileno'

Request Method:     GET 
Request URL:    http://luxingnan.azurewebsites.net/car/7/
Django Version:     1.8
Exception Type:     AttributeError
Exception Value:    

'cStringIO.StringO' object has no attribute 'fileno'

Exception Location:     D:\home\site\wwwroot\env\Lib\site-packages\pilkit\utils.py in
__enter__, line 248
Python Executable:  D:\Python27\python.exe
Python Version:     2.7.8
Python Path:    

[u'D:\\home\\site\\wwwroot\\env\\Lib\\site-packages',  '.',  'D:\\Windows\\SYSTEM32\\python27.zip',  'D:\\Python27\\DLLs',  'D:\\Python27\\lib',  'D:\\Python27\\lib\\plat-win',  'D:\\Python27\\lib\\lib-tk',  'D:\\Python27',  'D:\\Python27\\lib\\site-packages',  'D:\\home\\site\\wwwroot']

Server time:    Thu, 16 Apr 2015 12:28:26 +0000

下面是我的代码:

# models.py
class Carpic(models.Model):
    picture = models.ImageField('pic',upload_to='car-pictures')
    picture_slide = ImageSpecField(source='picture',
        processors=[ResizeToFill(762, 456)],
        format='JPEG',
        options={'quality': 60}
        )
# template.html
{% for pic in pictures %}
<li><img src="{{pic.picture_slide.url}}"/></li>
{% endfor %}

有人可以告诉我该怎么做吗?谢谢

4

1 回答 1

1

刚刚有机会看看这个(和你的 GH 问题)。我将在此处包含我的回复,因为这似乎是明智的做法(:

所以看起来这是 Azure 的一个怪癖,但我们绝对可以在 PILKit 中修复它。

PILKit 有一个实用程序可以消除 PIL 的一些噪音。它这样做的方式是临时替换stderr(使用它的文件描述符)。显然在 Azure 上,stderr 是 StringIO 的一个实例(它没有文件描述符)。对于这种情况,我们只需要为实用程序添加一个保护(就像dev/null is not writeable的保护一样)。这是一个很小的变化,但我现在很忙。公关将不胜感激!

因此,换句话说,这不是 FileWrapper 的问题(如评论中所建议的那样),而是 Azure 的假 stderr 和 PILKitquiet实用程序的组合。

于 2015-04-20T18:20:03.370 回答