а загрузка файлов через graphql все делают через fetch form-data или есть какой нибудь более элегантный способ?
Самый просто вариант s3 (в смысле любой s3 compatible storage, почти у всех есть и minio для тех, кто на железяках). Там есть presignedUrl, graphql просто отдает ссылку куда происходит загрузка файла + это не нагружает сам graphql сервер.
Вариант чуть сложнее, тоже самое, только отдельный upload сервис, который чекает права на загрузку и загружает файл как обычный сервис (так можно посчитать хеши файла, сделать пару версий картинок и тп).