【问题标题】:Content type multipart not supported when uploading .jpeg and .png to a Java GraphQL server将 .jpeg 和 .png 上传到 Java GraphQL 服务器时不支持内容类型 multipart
【发布时间】:2019-12-06 01:34:38
【问题描述】:

我正在关注这个answer 来实现graphql 文件上传。

compile group: 'commons-fileupload', name: 'commons-fileupload', version: '1.4'

Application.yml

spring.servlet.multipart.enabled=true

Spring Boot 应用类

@EnableAutoConfiguration(exclude={MultipartAutoConfiguration.class})

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

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

但我不断得到

Content type 'multipart/form-data;boundary=----WebKitFormBoundarygiGMuLecC2onH3UB' not supported

痕迹是

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=----WebKitFormBoundary36cu0FWBPBeUPgsH' not supported↵   at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:214)↵    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:419)↵ at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:365)↵  at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:65)↵   at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:401)↵  at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1232)↵   at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1015)↵   at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)↵ at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)↵ at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908)↵  at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)↵    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)↵ at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)↵    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)↵   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)↵   at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)↵  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)↵   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)↵   at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:90)↵    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)↵ at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)↵   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)↵   at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96)↵  at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)↵ at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)↵   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)↵   at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)↵  at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)↵ at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)↵   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)↵   at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)↵    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)↵ at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)↵   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)↵   at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)↵  at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)↵ at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)↵   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)↵   at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:117)↵   at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:106)↵ at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)↵ at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)↵   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)↵   at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)↵   at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)↵ at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)↵   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)↵   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)↵ at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)↵  at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)↵  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)↵   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)↵    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)↵    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)↵ at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)↵  at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)↵    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:836)↵ at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1747)↵ at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)↵ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)↵ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)↵ at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)↵  at java.lang.Thread.run(Thread.java:748)↵

我正在做的前端

import {useDropzone} from 'react-dropzone'

const DragDrop = ({mutate}: { mutate: any }) => {
  const onDrop = useCallback((acceptedFiles: any) => {
    console.log(acceptedFiles)
    // Do something with the files
    mutate({variables: {file: acceptedFiles[0]}})
  }, []);
  const {getRootProps, getInputProps, isDragActive} = useDropzone({onDrop});
  return (

    <div {...getRootProps()}>
      <input {...getInputProps()} />
      {
        isDragActive ?
          <p>Drop the files here ...</p> :
          <p>Drag 'n' drop some files here, or click to select files</p>
      }
    </div>
  )
};

const UploadFiles = () => {
    return (
      <Mutation mutation={gql` mutation($file: Upload!) { uploadFile(file: $file) } `}>
        {(mutate: any) => { return (<DragDrop mutate={mutate}/>); }}
      </Mutation>
    );
};

【问题讨论】:

    标签: java spring-boot graphql graphql-java


    【解决方案1】:

    由于声誉低,无法发表评论。根据日志,看起来甚至多部分数据也被视为内容类型。实际值应该只是“多部分/表单数据”,但在这种情况下,即使上传的文件内容似乎也是内容类型的一部分标题

    【讨论】:

    • 更新了问题。也许这会有所帮助
    • 好的,从开发工具输出来看,标题似乎是正确的。你能显示控制器方法 - 你如何访问表单数据
    • 我正在使用 com.graphql-java-kickstart:graphql-spring-boot-starter 为我创建 graphql 端点
    猜你喜欢
    • 2014-10-19
    • 1970-01-01
    • 2018-12-22
    • 2016-05-17
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 2020-06-18
    • 2016-04-25
    相关资源
    最近更新 更多