在python中使用Graphql和urllib上传文件会引发java.lang.IllegalStateException:通过ServerWebExchange.getFormData访问表单数据

问题描述

当我运行以下代码时,出现500服务器错误。我不确定是什么错误
我正在使用python urllib请求上传文件

query=''.join(("\"{\"query\":\"mutation($file: Upload!){\\n","  deployPlugin(fileUpload:$file){\\n","    id\\n","    status\\n","  }\\n","}\",\"variables\":{\"file\":null},\"operationName\":null}\""))
                
                urlData = {"operations" : query,"map": "{\"file0\":[\"variables.file\"]}",\
                        "file0":"@" + local_filename
                        }

                data = json.dumps(urlData)
                print (data)
                
                req = request.Request(apiURL,data = bytes(data.encode("utf-8"))) 
                #print(query)
                # Add the username and password.
                # If we knew the realm,we Could use it instead of None.
                req.add_header("Authorization","%s" % auth_header) 

                # Make a call to function
                response = urllib.request.urlopen(req)
                responseData = json.load(response) 
                print(responseData)



16-09-2020 06:03:22.179 [35m[boundedElastic-2][0;39m [1;31mERROR[0;39m o.s.b.a.w.r.e.AbstractErrorWebExceptionHandler.error - [a68254a4-11804]  500 Server Error for HTTP POST "/graphql"
java.lang.IllegalStateException: In a WebFlux application,form data is accessed via ServerWebExchange.getFormData().
    at org.springframework.web.reactive.result.method.annotation.AbstractMessageReaderArgumentResolver.readBody(AbstractMessageReaderArgumentResolver.java:158)
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
    |_ checkpoint ? org.springframework.security.web.server.authorization.AuthorizationWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? org.springframework.security.web.server.authorization.ExceptionTranslationWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? org.springframework.security.web.server.authentication.logout.logoutWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? org.springframework.security.web.server.savedrequest.ServerRequestCacheWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? org.springframework.security.web.server.context.SecurityContextServerWebExchangeWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? org.springframework.security.web.server.authentication.AuthenticationWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? org.springframework.security.web.server.context.ReactorContextWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? org.springframework.security.web.server.csrf.CsrfWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? org.springframework.security.web.server.header.HttpHeaderWriterWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? org.springframework.security.config.web.server.ServerHttpSecurity$ServerWebExchangeReactorContextWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? org.springframework.security.web.server.WebFilterChainProxy [DefaultWebFilterChain]
    |_ checkpoint ? org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain]
    |_ checkpoint ? HTTP POST "/graphql" [ExceptionHandlingWebHandler]
Stack trace:
        at org.springframework.web.reactive.result.method.annotation.AbstractMessageReaderArgumentResolver.readBody(AbstractMessageReaderArgumentResolver.java:158)
        at org.springframework.web.reactive.result.method.annotation.AbstractMessageReaderArgumentResolver.readBody(AbstractMessageReaderArgumentResolver.java:126)
        at org.springframework.web.reactive.result.method.annotation.RequestBodyMethodArgumentResolver.resolveArgument(RequestBodyMethodArgumentResolver.java:64)
        at org.springframework.web.reactive.result.method.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:123)
        at org.springframework.web.reactive.result.method.invocableHandlerMethod.getmethodArgumentValues(invocableHandlerMethod.java:201)
        at org.springframework.web.reactive.result.method.invocableHandlerMethod.invoke(invocableHandlerMethod.java:137)
        at org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter.lambda$handle$1(RequestMappingHandlerAdapter.java:199)
        at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:44)
        at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:153)
        at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56)
        at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:55)
        at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150)
        at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)