Django“File”对象没有属性“content_type”

2024-07-03 07:15:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我定义了一个函数,为模型中上传的每个图像创建缩略图。 以下是我的代码:

def create_thumbnail(self):
     if not self.coverphoto:
         return

     from PIL import Image
     from cStringIO import StringIO
     from django.core.files.uploadedfile import SimpleUploadedFile
     import os

     # Set our max thumbnail size in a tuple (max width, max height)
     THUMBNAIL_SIZE = (200,200)

     DJANGO_TYPE = self.coverphoto.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'
     elif DJANGO_TYPE == 'image/gif':
         PIL_TYPE = 'gif'
         FILE_EXTENSION = 'gif'

     # Open original photo which we want to thumbnail using PIL's Image
     image = Image.open(StringIO(self.coverphoto.read()))

     image.thumbnail(THUMBNAIL_SIZE, Image.ANTIALIAS)

     # Save the thumbnail
     temp_handle = StringIO()
     image.save(temp_handle, PIL_TYPE)
     temp_handle.seek(0)

     # Save image to a SimpleUploadedFile which can be saved into
     # ImageField
     suf = SimpleUploadedFile(os.path.split(self.coverphoto.name)[-1],
             temp_handle.read(), content_type=DJANGO_TYPE)
     # Save SimpleUploadedFile into image field
     self.coverphoto_thumbnail.save('%s_thumbnail.%s'%(os.path.splitext(suf.name)[0],FILE_EXTENSION), suf,save=False)

当我运行单元测试时,它显示错误:

^{pr2}$

显示的误差线为:

DJANGO_TYPE = self.coverphoto.file.content_type 

因为我从一个老的django代码片段中得到了这段代码。我想这可能是由不同的django版本引起的。在

我可以知道如何检查django1.6中的内容类型吗?在

有没有解决这个问题的好办法?在

谢谢。在


Tags: django代码imageimportselfpiltypeextension
2条回答

我用下面的方法解决了这个问题:

...
#DJANGO_TYPE = self.image.file.content_type

if self.image.name.endswith(".jpg"):
    PIL_TYPE = 'jpeg'
    FILE_EXTENSION = 'jpg'
    DJANGO_TYPE = 'image/jpeg'

elif self.image.name.endswith(".png"):
    PIL_TYPE = 'png'
    FILE_EXTENSION = 'png'
    DJANGO_TYPE = 'image/png'
...

对我有用。不需要查找conten_类型,只需查看文件结尾。如果需要.gif或其他内容,则需要查找正确的内容类型并添加其他self.image.name.endswith(".gif")等等。在

    from mimetypes import MimeTypes
    import urllib
    mime = MimeTypes()
    url = urllib.pathname2url(file_name)
    mime_type = mime.guess_type(url)

相关问题 更多 >