_examples/fileupload/server/server.go (92 lines of code) (raw):

package main import ( "context" "errors" "io" "log" "net/http" "github.com/99designs/gqlgen/_examples/fileupload" "github.com/99designs/gqlgen/_examples/fileupload/model" "github.com/99designs/gqlgen/graphql" "github.com/99designs/gqlgen/graphql/handler" "github.com/99designs/gqlgen/graphql/handler/extension" "github.com/99designs/gqlgen/graphql/handler/transport" "github.com/99designs/gqlgen/graphql/playground" ) func main() { http.Handle("/", playground.Handler("File Upload Demo", "/query")) resolver := getResolver() var mb int64 = 1 << 20 srv := handler.New(fileupload.NewExecutableSchema(fileupload.Config{Resolvers: resolver})) srv.AddTransport(transport.POST{}) srv.AddTransport(transport.MultipartForm{ MaxMemory: 32 * mb, MaxUploadSize: 50 * mb, }) srv.Use(extension.Introspection{}) http.Handle("/query", srv) log.Print("connect to http://localhost:8087/ for GraphQL playground") log.Fatal(http.ListenAndServe(":8087", nil)) } func getResolver() *fileupload.Stub { resolver := &fileupload.Stub{} resolver.MutationResolver.SingleUpload = func(ctx context.Context, file graphql.Upload) (*model.File, error) { content, err := io.ReadAll(file.File) if err != nil { return nil, err } return &model.File{ ID: 1, Name: file.Filename, Content: string(content), }, nil } resolver.MutationResolver.SingleUploadWithPayload = func(ctx context.Context, req model.UploadFile) (*model.File, error) { content, err := io.ReadAll(req.File.File) if err != nil { return nil, err } return &model.File{ ID: 1, Name: req.File.Filename, Content: string(content), }, nil } resolver.MutationResolver.MultipleUpload = func(ctx context.Context, files []*graphql.Upload) ([]*model.File, error) { if len(files) == 0 { return nil, errors.New("empty list") } var resp []*model.File for i := range files { content, err := io.ReadAll(files[i].File) if err != nil { return []*model.File{}, err } resp = append(resp, &model.File{ ID: i + 1, Name: files[i].Filename, Content: string(content), }) } return resp, nil } resolver.MutationResolver.MultipleUploadWithPayload = func(ctx context.Context, req []*model.UploadFile) ([]*model.File, error) { if len(req) == 0 { return nil, errors.New("empty list") } var resp []*model.File for i := range req { content, err := io.ReadAll(req[i].File.File) if err != nil { return []*model.File{}, err } resp = append(resp, &model.File{ ID: i + 1, Name: req[i].File.Filename, Content: string(content), }) } return resp, nil } return resolver }