【问题标题】:Resize thumbnails django Heroku, 'backend doesn't support absolute paths'调整缩略图 django Heroku,“后端不支持绝对路径”
【发布时间】:2013-08-15 11:25:52
【问题描述】:

我已经使用 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)

我有什么遗漏的吗?我需要告诉它别的吗?

【问题讨论】:

    标签: django heroku pillow


    【解决方案1】:

    使用 Heroku 和 AWS,您只需将 FileField/ImageField 'path' 的方法更改为 'name'。所以你的情况是:

    image.save(self.project_thumbnail.name)
    

    而不是

    image.save(self.project_thumbnail.path)
    

    【讨论】:

      【解决方案2】:

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

      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()
      

      【讨论】:

        【解决方案3】:

        NotImplementedError: This backend doesn't support absolute paths - 可以通过将file.path 替换为file.name 来修复

        它在控制台中的外观

        c = ContactImport.objects.last()
        
        >>> c.json_file
        <FieldFile: protected/json_files/data_SbLN1MpVGetUiN_uodPnd9yE2prgeTVTYKZ.json>
        
        >>> c.json_file.name
        'protected/json_files/data_SbLN1MpVGetUiN_uodPnd9yE2prgeTVTYKZ.json'
        

        【讨论】:

          猜你喜欢
          • 2021-03-04
          • 2021-11-24
          • 1970-01-01
          • 2011-02-03
          • 2018-04-12
          • 2013-03-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多