1

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

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

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

4

1 回答 1

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

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

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中是存储桶中图像的路径(不管它是什么),但您需要完整路径才能在前端加载它。

于 2022-01-17T15:45:04.457 回答