Передача файлов изображений in_memory во внешний API по POST-запросу
Вот сценарий этого поста..... Пользователь отправляет несколько изображений в REST API, мне нужно получить эти изображения и отправить их во внешний API, чтобы получить оценки, вычисленные в AI Modal.
Я нашел много решений для отправки сохраненных изображений во внешний API, но не смог найти ничего, связанного с объектами в памяти, поэтому я размещаю свое решение здесь, чтобы в следующий раз кому-то было проще
import requests
from rest_framework.exceptions import ValidationError
def external_api(img):
api_endpoint = 'YOUR_EXTERNAL_API'
payload = {}
files = [
('img', (img.get("img").name, img.get('img').file, img.get("img").content_type))
]
headers = {}
response = requests.request("POST", api_endpoint, headers=headers, data=payload, files=files)
return response
#Serializer
class ScoreCardSerializer(serializers.ModelSerializer):
score_data = serializers.JSONField(read_only=True, required=False)
class Meta:
model = ScoreCard
exclude = ['card_display']
def create(self, validated_data):
score_image = validated_data.pop('score_card_image')
ai_response = []
for image in score_image:
ai = external_api(image)
if ai.status_code == 200:
ai_response.append(ai.json())
else:
raise ValidationError("Server is overloaded. Please try again in few minutes")
specie = ScoreCard.objects.create(**validated_data)
for image in score_image:
Images.objects.create(score_card_id=specie.id, img=image['img'])
specie.score_data = ai_response
specie.save()
return specie