【问题标题】:Django - Uploaded image gets saved twice: under original and validated nameDjango - 上传的图像被保存两次:在原始名称和经过验证的名称下
【发布时间】:2022-01-16 23:01:38
【问题描述】:

我正在尝试解决一个问题。 在图像文件上传时,我想重命名文件并调整其大小。我想出了下面的一个方法。 我设法调整图像大小并以有效名称保存。

不幸的是,文件被保存了两次,而且名称也是无效的。无效的存储在我的对象中。我怎样才能解决这个问题?提前致谢

class SparePartImages(models.Model):
  sparepart = models.ForeignKey('SparePart', on_delete=models.CASCADE)
  image = models.ImageField(upload_to='spare-part/', blank=True, null=True)

  def save(self, *args, **kwargs):
    super(SparePartImages, self).save(*args, **kwargs)
    max_size = settings.IMAGE_MAX_SIZE
    file = Image.open(self.image)
    (width, height) = file.size
    if (width/max_size < height/max_size):
      factor = height/max_size
    else:
      factor = width/max_size
    size = (int(width/factor), int(height/factor))
    file = file.resize(size, Image.ANTIALIAS)

    file.save(removeAccent(self.image.path))

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    你调用 save 两次,一个是 super,另一个是 save 来修复它:

    from io import BytesIO
    from django.core.files.uploadedfile import InMemoryUploadedFile
    import sys
    
    class SparePartImages(models.Model):
     # rest of the code
     def save(self, *args, **kwargs):
       # rest of the code 
       # but remove file.save(removeAccent(self.image.path))
       output = BytesIO()
       file.save(output, format='JPEG', quality=100)
       output.seek(0)
       self.image = InMemoryUploadedFile(
          output ,'ImageField', "%s.jpg" %self.image.name.split('.')[0], 'image/jpeg', sys.getsizeof(output), None
       )
       super(SparePartImages, self).save(*args, **kwargs)
    

    【讨论】:

    • 它有帮助。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 2023-03-28
    • 2019-05-19
    • 2014-07-12
    • 1970-01-01
    • 2014-05-20
    相关资源
    最近更新 更多