调整缩略图django Heroku,'后端不支持绝对路径'

时间:2013-08-13 17:57:41

标签: django heroku pillow

我使用Django在Heroku上部署了一个应用程序,到目前为止它似乎正在运行,但我在上传新缩略图时遇到问题。我已经安装了Pillow,允许我在上传图像时调整图像大小并保存调整大小的缩略图,而不是原始图像。但是,每次上传时,都会出现以下错误:“此后端不支持绝对路径。”当我重新加载页面时,新图像就在那里,但它没有调整大小。我正在使用Amazon AWS来存储图像。

我怀疑它与我的models.py有关。这是我的调整大小代码:

class Projects(models.Model):
    project_thumbnail = models.FileField(upload_to=get_upload_file_name, null=True, blank=True)

    def __unicode__(self):
        return self.project_name

    def save(self):
        if not self.id and not self.project_description:
            return

        super(Projects, self).save()
        if self.project_thumbnail:
            image = Image.open(self.project_thumbnail)
            (width, height) = image.size

        image.thumbnail((200,200), Image.ANTIALIAS)
            image.save(self.project_thumbnail.path)

有什么东西我不见了吗?我需要告诉别的吗?

2 个答案:

答案 0 :(得分:9)

使用Heroku和AWS,您只需要更改FileField / ImageField'路径'的方法。命名'。所以在你的情况下,它将是:

image.save(self.project_thumbnail.name)

而不是

image.save(self.project_thumbnail.path)

答案 1 :(得分:1)

我在其他人的帮助下也找到了答案,因为我的搜索没有得到我想要的答案。这是Pillow的一个问题以及它如何使用绝对路径进行保存,所以我转而使用存储模块作为临时保存空间并且它现在正在工作。这是代码:

from django.core.files.storage import default_storage as storage

...

   def save(self):
        if not self.id and not self.project_description:
            return

        super(Projects, self).save()
        if self.project_thumbnail:
            size = 200, 200
            image = Image.open(self.project_thumbnail)
            image.thumbnail(size, Image.ANTIALIAS)
            fh = storage.open(self.project_thumbnail.name, "w")
            format = 'png'  # You need to set the correct image format here
            image.save(fh, format)
            fh.close()