在Django中使用ImageField获取上传的图像名称,以及如何在存储之前为已调整大小的图像指定自动生成的名称

2024-04-25 23:40:52 发布

您现在位置:Python中文网/ 问答频道 /正文

1.使用ImageField获取上传图像的名称: 我使用ImageField将post请求得到的图像存储在特定路径中。它返回的是图像路径而不是图像名称

这是我的模型:image\u ref是全局变量

class IMGResize(models.Model):
        image = models.ImageField(upload_to='ImgResize', blank=True)
class Meta:
        db_table = 'imgresize'

    def __str__(self):
        return self.image



    def save(self,force_insert=False, force_update=False, using=None):
        if not self.image:
           return  
        super(IMGResize, self).save()   
        global image_ref
        image_ref = self.image 
        super(IMGResize, self).save()

这里它是为图像生成一些默认名称,我如何才能得到图像的名称?你知道吗

<强>2。如何为调整大小的图像自动生成名称:

在我的上一个模型中,我得到了一些图片,我试图用同一个模型中的其他模型来调整其大小并存储在其他路径中型号.py文件。你知道吗

这是我的模型:

from .resize_code import image_resize
    class Profile(models.Model):
        image = models.ForeignKey(IMGResize, related_name='profiles', on_delete=models.CASCADE)
        name=models.CharField(max_length=10)
        image_width=models.PositiveIntegerField(null=True, blank=False)
        image_height=models.PositiveIntegerField(null=True, blank=False)


        class Meta:
            db_table = 'profiles'
            unique_together=('name','image')

        def __str__(self):
            return self.name

        def save(self,force_insert=False, force_update=False, using=None):
            global image_ref
            super(Profile, self).save()
            image_resize(self,image_ref)
            super(Profile, self).save()

这是我的照片_代码.py文件:

def image_resize(self,image,force_insert=False, force_update=False, using=None):
        if not image:
           return  
        img = Image.open(os.path.abspath(str(image)), 'r')
        img = resize_contain(img, [self.image_width, self.image_height])
        path='resized_images/contain.jpeg'
        img.save(path, img.format)

在这里调整大小_代码.py我是硬编码的名称,而不是重新调整大小的图像生成它每次(路径='重新调整大小的\u图像)/包含.jpeg')

这是我的序列化程序.py文件:

class profilesSerializer(serializers.ModelSerializer):
    class Meta:
        model = Profile
        fields = ('name','image_width','image_height',)

    class IMGResizeSerializer(serializers.ModelSerializer):

        profiles = profilesSerializer(many=True,read_only=False)
        image = Base64ImageField()
        class Meta:
            model = IMGResize
            fields = ('id','image','profiles',)

        def create(self, validated_data):
            profiles_data = validated_data.pop('profiles')
            image = IMGResize.objects.create(**validated_data)
            for profile_data in profiles_data:
                Profile.objects.create(image=image, **profile_data)
            return image

谢谢


Tags: 模型图像imageself名称reffalsedata
1条回答
网友
1楼 · 发布于 2024-04-25 23:40:52

您可以从相应的视图本身检索上载图像的名称。参见下面的示例

def image_upload_view(request):
    all_files = request.FILES  # will be a 'dict' like object
    specific_file = all_files['some_key']  # this is your image in "InMemmoryFile" type
    image_name = specific_file.name  # this will be the name
    # your code

上传的文件将是^{}类型,这是^{}的子类。它有^{}属性,提供上传文件的名称

相关问题 更多 >