【问题标题】:Using Djangos ImageField to upload an image, rename it to a random filename and create thumbnail使用 Djangos ImageField 上传图像,将其重命名为随机文件名并创建缩略图
【发布时间】:2011-01-15 17:12:27
【问题描述】:

大家好,我已经为我的图片写了一个简单的上传方法

class Picture(models.Model):
    path = models.CharField(max_length=200)
    filename = models.CharField(max_length=200)
    car = models.ForeignKey('Car')
    thumb_path = models.CharField(max_length=200)
    created_on = models.DateField(auto_now_add=True)
    updated_on = models.DateField(auto_now=True)

    def save(self):
        if not self.id:
            thumb_size = 128, 128
            thumb_path = "assests/uploads/thumb"+self.filename
            t = Image.open(self.path)
            t.thumbnail(thumb_size,Image.ANTIALIAS)
            t.save(thumb_path, "JPEG")
        self.thumb_path = thumb_path
        super(Picture, self).save()

    def delete(self):
        os.unlink(self.thumb_path)
        os.unlink(self.path)
        super(Picture, self).delete()

正如您所见,这不是最好的方法,我想继续使用 ImageField() 来完成我的大部分工作,但我仍然希望能够灵活地创建缩略图和随机文件名。

我需要为 PictureThumbnail 创建另一个模型吗?我真的不想使用任何第三部分扩展。

我如何使用 ImageField 来完成这项工作?所有的图片都将被上传到/assets/uploads/

谢谢

【问题讨论】:

    标签: python django file upload


    【解决方案1】:

    您可以使用以下改编版本:

    http://www.djangosnippets.org/snippets/1100/

    或者根据您的具体需要,您可以考虑使用基于模板过滤器的方法,如下所示:

    http://www.djangosnippets.org/snippets/1887/

    【讨论】:

    • 我正在使用第一个链接。但是 ImageField() 实际上没有上传任何东西?它将数据添加到数据库但没有上传文件?有什么想法吗?
    • 在没有其余代码的情况下,图像字段是否正确上传?注意:upload_to 参数是一个本地文件系统路径,它将附加到您的 MEDIA_ROOT 设置中,并且您的 python 实例正在运行的用户必须对此具有写入权限。
    猜你喜欢
    • 2017-06-02
    • 2017-03-19
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 2019-01-20
    • 1970-01-01
    相关资源
    最近更新 更多