#django #image #file #get #graphql
#django #изображение #файл #получить #graphql ( графический sql ) #graphql
Вопрос:
Мне уже удалось внести изменения для загрузки, обновления и печати изображений. Но как я могу получить файлы изображений в base64 в запросе?
class Image(models.Model):
image = models.ImageField(blank=True, null=True, upload_to="uploads/images")
product = models.ForeignKey(Product, on_delete=models.CASCADE, blank=True, null=True)
Комментарии:
1. Рассматривали ли вы возможность возврата пути к изображению в graphql? Я спрашиваю, потому что ImageField хранит строковый путь к файлу изображения в каталоге мультимедиа в соответствии с вашими настройками.
2. Привет. Спасибо за комментарий. Я хотел вернуть файл с изображением в запросе. Я отправлю свой запрос прямо сейчас.
Ответ №1:
Я пишу свое собственное решение. Сначала я создал новое поле в объекте ImageType для хранения файла изображения в базе 64. Кроме того, я проверил, что значение поля изображения существует, а записанный адрес связан с существующим файлом на жестком диске. Затем, когда изображение запрашивается, появляется новое поле с именем base64file с сохраненным изображением, которое затем может быть декодировано во внешнем интерфейсе. Надеюсь, это кому-то поможет. Вот мой код:
class ImageType(DjangoObjectType):
class Meta:
model = Image
filter_fields = {'product_id': ['exact'],
interfaces = (relay.Node,)
base64file = graphene.String()
def resolve_base64file(self, info):
if self is not None and self.image and hasattr(self.image, 'url'):
if os.path.isfile(self.image.url):
return base64.b64encode(self.image.read())
else:
return 'File not found'
return ''
Комментарии:
1. Это вызовет проблемы, если / когда вы начнете хранить свои изображения на сервере, который отличается от вашего реального веб-сервера.
2. Кроме того, передавая URL-адреса в браузер, вы можете разрешить браузеру использовать собственный кэш для более быстрой загрузки изображений. Загружая их в веб-приложение, вы заставляете браузер повторно использовать ресурсы снова и снова.
3. Я понимаю, спасибо. Итак, как я могу создать конечный пункт, где можно получить изображение из серверной части, если я использую graphql?
4. Как клиент отображает изображения? Вот что пришлось бы изменить.
5. Он будет использовать React amp; Apollo. В зависимости от того, как я его отправлю.