用Quarkus处理多部分/表单数据

问题描述

我正面临一个问题,我无法在资源中获取表格,变量始终为空

我的资源:

    @POST
    @Path("/upload-logo")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    @Produces(MediaType.TEXT_PLAIN)
    public String uploadlogo (@MultipartForm logoMultipartForm logoMultipartForm) throws IOException {
        return this.companyService.uploadlogo(username,logoMultipartForm.logo);

    }

表单模型

public class logoMultipartForm {

    @FormParam("logo")
    public byte[] logo;

    @FormParam("filename")
    @PartType("text/plain")
    public String fileName;
}

我的提取请求:

  uploadlogo: async (file: File) => {
    const form = new FormData();
    form.append("logo",file,"logo.png");
    form.append("filename","test");

    const { query,abort } = HttpClient.POST(`${COMPANY_URL}/upload-logo`,form);
    let promise = query
      .then((res: any) => {
        console.log("Response",res);
        if (res.status === 200) {
          return res.text();
        } else {
          throw res;
        }
      })
      .then((url: any) => url);

    promise.cancel = abort;

    return promise;
  },

还有我的HttpClient:

  POST: function (url: string,body: any,config?: any) {
    const controller = new AbortController();
    const signal = controller.signal;
    return { query: fetch(url,{ signal,method: "POST",body,...config }) as any,abort: () => controller.abort() };
  },

为确保我正在使用代理进行测试,并且请求实际上有效:变量fileName和logo始终为空。

这是我的pom.xml:

  <dependencies>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-resteasy</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-junit5</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>io.rest-assured</groupId>
      <artifactId>rest-assured</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-smallrye-graphql</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-flyway</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-jdbc-postgresql</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-hibernate-orm-panache</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-reactive-pg-client</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-resteasy-qute</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-oidc</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-rest-client</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-resteasy-multipart</artifactId>
    </dependency>

  </dependencies>

我看不出问题出在哪里。

我已经看过Multipart的官方resteasy文档,但看不出问题出在哪里。我已经用MultipartFormDataInput测试过了,所有部分都是空的。

在此先感谢您的帮助! :)

解决方法

您缺少依赖项:

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-multipart-provider</artifactId>
</dependency>

确保您的@PartType("text/plain")继承自org.jboss.resteasy包!以及@MultipartForm(导入org.jboss.resteasy.annotations.providers.multipart.MultipartForm;)

有一个很好的示例:Quarkus tutorial。看包装!