当前位置: 首页 > 知识库问答 >
问题:

如何用GraphQL-Java上传文件?

萧焱
2023-03-14
@Component
public class FilesUpload implements GraphQLMutationResolver {

    public Boolean testMultiFilesUpload(List<Part> parts, DataFetchingEnvironment env) {
        // get file parts from DataFetchingEnvironment, the parts parameter is not used
        List<Part> attchmentParts = env.getArgument("files");
        System.out.println(attchmentParts);
        return true;
    }
}
type Mutation {
    testSingleFileUpload(file: Upload): UploadResult
}

共有1个答案

荆煌
2023-03-14

>

  • 在模式中定义标量类型

    标量上载

    我们应该为上传配置GraphQLScalarType,使用如下:

    @Configuration
    public class GraphqlConfig {
    
       @Bean
       public GraphQLScalarType uploadScalarDefine() {
          return ApolloScalars.Upload;
       } 
    }
    
    type Mutation {
      testMultiFilesUpload(files: [Upload!]!): Boolean
    }
    
    public Boolean testMultiFilesUpload(List<Part> parts, DataFetchingEnvironment env) {
        // get file parts from DataFetchingEnvironment, the parts parameter is not use
        List<Part> attachmentParts = env.getArgument("files");
        int i = 1;
        for (Part part : attachmentParts) {
          String uploadName = "copy" + i;
          try {
            part.write("your path:" + uploadName);
          } catch (IOException e) {
            e.printStackTrace();
          }
          i++;
        }
        return true;   
      }
    }
    
    public class PartDeserializer extends JsonDeserializer<Part> {
    
      @Override
      public Part deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {         
         return null;
      }
    }
    

    getArgument(“文件”)

    将其注册到ObjectMapper:

    @Bean
    public ObjectMapper objectMapper() {
      ObjectMapper objectMapper = new ObjectMapper();
      objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
      SimpleModule module = new SimpleModule();
      module.addDeserializer(Part.class, new PartDeserializer());
      objectMapper.registerModule(module);
      return objectMapper;
    }
    
    operations
    
    { "query": "mutation($files: [Upload!]!) {testMultiFilesUpload(files:$files)}", "variables": {"files": [null,null] } }
    
    map
    
    { "file0": ["variables.files.0"] , "file1":["variables.files.1"]}
    
    file0
    
    your file
    
    file1
    
    your file
    

    像这样:

  •  类似资料:
    • 我尝试用java GraphQL上传文件。我研究了这个主题的解决方案:如何用GraphQL-Java上传文件?我使用的是graphql-java版本11.0、graphql-spring-boot-starter版本5.0.2、graphql-java-kickstart版本7.5.0。 我做错了什么?

    • 以下是AWS Amplify GraphQL客户端的官方文档:https://aws-amplify.github.io/amplify-js/media/api_guide.html.本节提供了基本输入的示例。 对于AWS Mobile Appsync SDK For Javascript,这里有一个详细的文档:https://docs.aws.amazon.com/appsync/latest

    • 问题内容: 我正在上传base64字符串,但GraphQL挂起了。如果我将字符串切成少于50,000个字符,它将起作用。50,000个字符后,graphQL永远不会进入解析函数,但不会给出错误。在较小的字符串上,它可以正常工作。 问题答案: 此处的正确方法是使用AWS AppSync通过复杂类型执行实际的S3上传- 您在此处说明的内容看起来更像是您尝试将base64编码的图像作为字符串保存到字段中

    • 问题内容: 谁能让我知道如何使用Java代码使用Selenium上传文件? 当我单击应用程序中的按钮时,它将在新窗口中打开,可以用来选择上传文件。Silverlight(C#)开发的浏览按钮。 问题答案: 首先确保输入元素可见 正如Mark Collin在此处的讨论中所述: 不要单击浏览按钮,它会触发操作系统级别的对话框并有效地停止测试。 相反,你可以使用: myUploadElement是该元素

    • 谁能让我知道如何通过Java代码使用Selenium上传文件? 当我点击应用程序中的按钮时,它会在新窗口中打开,我可以用它来选择上传文件。Silverlight(C#)开发的浏览按钮。

    • 我正在尝试使用多部分实体方法上传文件。但它失败,错误说{“错误”:“文件参数值'无'无效”} 我的代码是: File File = new File(" C:/Users/SST-06/Desktop/new . txt "); 我的实体文件包含所有提到的参数。 -hkYO-pblk 0 uqlxjtvklrbkosxz 7 mye-8 wbvbvanx Content-Disposition:f