Django REST框架:上传图像并重命名

时间:2016-10-13 20:56:08

标签: django django-rest-framework

我的应用程序用于注册系统中的餐馆。除了一些数据(如餐厅名称),前端正在发送餐厅标识。使用此代码:

class Base64ImageField(serializers.ImageField):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.default_error_messages['image_not_png'] = _(
            'Only .png files are supported.'
        )    

    def to_internal_value(self, data):
        if isinstance(data, six.string_types):
            if 'data:' in data and ';base64,' in data:
                header, data = data.split(';base64,')
            try:
                decoded_file = base64.b64decode(data)
            except TypeError:
                self.fail('invalid_image')
            file_name = str(uuid.uuid4())
            file_extension = self.get_file_extension(file_name, decoded_file)
            if file_extension is not 'png': 
                self.fail('image_not_png')
            complete_file_name = '%s.%s'.format(file_name, file_extension)
            data = ContentFile(decoded_file, name=complete_file_name)
        return super().to_internal_value(data)

    def get_file_extension(self, file_name, decoded_file):
        return imghdr.what(file_name, decoded_file)

我能够使用一些随机生成的名称解码并将徽标保存到磁盘。现在我想知道如何正确命名该文件。通过'正确',我的意思是我想要将徽标文件命名为与餐馆名称相同,这是有问题的,因为to_internal_value除了文件数据之外无法访问任何其他内容。问题是:应该在哪里我把代码重命名为与同一请求中出现的餐馆名称相同?

0 个答案:

没有答案