Вот решение, которое я сделал, добавив пользовательский скаляр с именем «FileUpload» и добавив GraphQLUpload в качестве распознавателя следующим образом:
import { GraphQLUpload } from 'graphql-upload';
export const resolvers = {
FileUpload: GraphQLUpload
};
Работает отлично, но может быть не идеальным решением. Надеюсь, Аполлон исправит это в ближайшее время.
P.S. Чтобы загрузить файл из браузера, вам также необходимо правильно установить ссылку для загрузки в клиенте Apollo. Вот мой код:
import { ApolloLink, split } from 'apollo-link';
import { createHttpLink } from 'apollo-link-http';
import { createUploadLink } from 'apollo-upload-client';
// Create HTTP Link
const httpLink = createHttpLink({
uri: ...,
credentials: 'include'
});
// Create File Upload Link
const isFile = value =>
(typeof File !== 'undefined' && value instanceof File) || (typeof Blob !== 'undefined' && value instanceof Blob);
const isUpload = ({ variables }) => Object.values(variables).some(isFile);
const uploadLink = createUploadLink({
uri: ...
credentials: 'include'
});
const terminatingLink = (isUpload, uploadLink, httpLink);
const link = ApolloLink.from([<Some Other Link...>, <Another Other Link...>, terminatingLink]);
const apolloClient = new ApolloClient({
link,
...
});