【问题标题】:how to make an api that gives an image from some custom directory in django rest framework如何制作一个从 django rest 框架中的某个自定义目录中提供图像的 api
【发布时间】:2022-01-17 14:31:34
【问题描述】:

我正在编写一个包含电影和电视节目的网站的后端代码。每部电影都有一张海报,可以在前端使用。这些海报保存在特定的目录文件夹中(比如说“\Posters”)。

我需要的是一个 API,它使用像 .../Poster/Jumanji_2017.jpg.../Poster/Jumanji%202017.jpg 或任何类似于电影标题的 URL 发送回图像(例如“Jumanji 2017.jpg”)。

无论如何我可以做到这一点吗? (最好不做图像模型)

【问题讨论】:

    标签: django-models django-rest-framework django-uploads


    【解决方案1】:

    如果您知道BASE_URL,您将在其中保存图像,就像您在部署时一样,您可以将其保存在外部存储桶(存储)上,然后您可以进行如下操作:

    class YourModelSerialiser(serializers.ModelSerializer):
    
    image_url = serializers.SerializerMethodField()
    
    class Meta:
        model = YourModel
        fields = ('some_field', 'some_other_field', 'image_url')
    
    @staticmethod
    def get_image_url(obj):
        return BASE_URL + obj.image.url
    

    但是当您不知道或不关心保存图像的存储桶(存储)url时,您可以使用另一种方法:

    class YourModelSerialiser(serializers.ModelSerializer):
    
    image_encoded= serializers.SerializerMethodField()
    
    class Meta:
        model = YourModel
        fields = ('some_field', 'some_other_field', 'image_encoded')
    
    @staticmethod
    def get_image_encoded(obj):
        return base64.b64encode(obj.image)
    

    对于这个你必须import base64 然后在你的前端你可以像这样将图像加载为 base64

    <img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA
        AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
            9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Alt text" />
    

    附言。在第一个示例中,obj.image.url 是存储桶中图像的路径(随便吧),但您需要完整路径才能在前端加载它。

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      • 2018-03-26
      相关资源
      最近更新 更多