Загрузка файлов с использованием graphql-upload, apollo-server-fastify и кода NestJS в первую очередь - PullRequest
0 голосов
/ 06 ноября 2019

Какова правильная реализация для получения файловых загрузок от клиента на сервере, используя следующую комбинацию пакетов / методов (и их соответствующие зависимости не перечислены):

  • graphql-upload
  • apollo-server-fastify
  • @nestjs/platform-fastify (первый подход к коду)

В идеале мы пытаемся реализовать следующее (из загрузка файлов с сервера apollo ) используя метод NestJS GraphQL Code First (за исключением нескольких файлов вместо одного)

const { ApolloServer, gql } = require('apollo-server');

const typeDefs = gql`
  type File {
    filename: String!
    mimetype: String!
    encoding: String!
  }

  type Query {
    uploads: [File]
  }

  type Mutation {
    singleUpload(file: Upload!): File!
  }
`;

const resolvers = {
  Query: {
    uploads: (parent, args) => {},
  },
  Mutation: {
    singleUpload: (parent, args) => {
      return args.file.then(file => {
        //Contents of Upload scalar: https://github.com/jaydenseric/graphql-upload#class-graphqlupload
        //file.stream is a node stream that contains the contents of the uploaded file
        //node stream api: https://nodejs.org/api/stream.html
        return file;
      });
    },
  },
};

const server = new ApolloServer({
  typeDefs,
  resolvers,
});

server.listen().then(({ url }) => {
  console.log(`? Server ready at ${url}`);
});

Прямо сейчас мой клиент правильно отправляет файлы на мой сервер, используя следующую мутацию:

gql`
  mutation uploadObjects($files: [Upload!]!) {
    uploadObjects(files: $files) {
      bucketKey
    }
  }
`;

Здесь приведены ссылки на изображения запроса, отправляемого с двоичными файлами, как и ожидалось:

...