Часто multipart (graphql-multipart-request) или отдельный REST/S3 pre-signed URL; бинарники плохо ложатся в JSON-only GraphQL.
Разбор
- Pre-signed upload + mutation с URL метаданных — популярный паттерн.
- Лимиты размера и MIME обязательны.
- Не раздувайте schema скаляром Upload без нужды.
- CDN для выдачи файлов.
Итог
Файлы — pre-signed/REST или аккуратный multipart, не «всё в JSON».