graphql-spring-boot上传二进制文件

graphql-spring-boot上传二进制文件,第1张

graphql-spring-boot上传二进制文件

Spring boot的嵌入式Tomcat默认为Servlet 3.x多部分支持。GraphQL Java
servlet支持公用FileUpload。为了使工作正常,您必须禁用Spring boots默认的multipart配置,例如:

在pom.xml中为commons-fileupload添加Maven依赖项

    <dependency>        <groupId>commons-fileupload</groupId>        <artifactId>commons-fileupload</artifactId>        <version>1.3.3</version>    </dependency>

Application.yml

spring:    servlet:      multipart:         enabled: false

Spring Boot应用程序类

@EnableAutoConfiguration(exclude={MultipartAutoConfiguration.class})

然后在您的@Configuration中添加一个@Bean

@Bean(name = "multipartResolver")public CommonsMultipartResolver multipartResolver() {    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();    multipartResolver.setMaxUploadSize(100000);    return multipartResolver;}

现在,您可以在GraphQL上下文中找到上载的多部分文件,因为它们会自动映射到:

environment -> context -> files

可从 DataFetchingEnvironment访问

突变的实现示例:

@Componentpublic class Mutation implements GraphQLMutationResolver {    @Autowired    private TokenService tokenService;    @Autowired    private UserRepository userRepository;    @Autowired    private UserService userService;    @Autowired    private ProjectRepository repository;    @Autowired    @Qualifier( value = "modeshape" )    private StorageService storageService;    @GraphQLField @GraphQLRelayMutation    public ProjectItem createProject( CreateProjectInput input, DataFetchingEnvironment environment ) {        Project project = new Project( input.getName() );        project.setDescription( input.getDescription() );        GraphQLContext context = environment.getContext();        Optional<Map<String, List<FileItem>>> files = context.getFiles();        files.ifPresent( keys -> { List<FileItem> file = keys.get( "file" ); List<StorageService.FileInfo> storedFiles = file.stream().map( f -> storageService.store( f, "files", true ) ).collect( Collectors.toList() ); project.setFile( storedFiles.get( 0 ).getUuid() );        } );        repository.save( project );        return new ProjectItem( project );    }class CreateProjectInput {    private String name;    private String description;    private String clientMutationId;    @GraphQLField    public String getName() {        return name;    }    public String getDescription() {        return description;    }    public void setDescription( String description ) {        this.description = description;    }    @GraphQLField    public String getClientMutationId() {        return clientMutationId;    }}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5621668.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-15
下一篇2022-12-15

发表评论

登录后才能评论

评论列表(0条)

    保存