В вашей схеме сервера вам нужно определить аргумент файла как тип Upload. Это встроенный тип, предоставляемый Apollo. Однако, если вы получаете ошибки о типе Upload, просто добавьте его как пользовательский скалярный тип .
const { gql } = require('apollo-server');
const TypeDef = gql `
scalar Upload
type Mutation {
upload(file: Upload!)
}
`
В ваших револьверах вы можете получить доступ к файлу в ваших аргументах. Стоит отметить, что файл будет обещанием;
const resolver = {
Mutation: {
async upload(obj, args, context, info) {
const file = await args.file;
// ... DO STUFF
},
}
}
Пакет, который вы ищете для загрузки файлов: apollo-angular-link-http
пакет . В контексте запроса вы должны установить для useMultipart значение true.
Таким образом, запрос на загрузку файла должен выглядеть примерно так.
// The Mutation Query Using Type of 'Upload' to represent the file
const uploadFileMutation = gql`
mutation UploadMutation($file: Upload!) {
upload(file: $file) {
YOUR RESPONSE
}
}
}
// The Apollo Client request
// Context of 'useMultipart' needs to be set to true to enable file upload
this.Apollo.mutate<any>({
mutation: uploadFileMutation,
variables: {
file: this.file
},
context: {
useMultipart: true
}
}).subscribe(({ data }) => {
this.response = data.upload
});