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

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

邢星波
2023-03-14

我遇到了一个问题,我无法在我的资源中获取我的表单,变量总是为空

我的资源:

    @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() };
  },

为了确保我正在使用代理进行测试并且请求实际上是好的:变量文件名和徽标始终为空。

这是我的绒球.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>

我不知道问题出在哪里。

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

提前感谢您的帮助!:)

共有1个答案

苗盛
2023-03-14

您缺少依赖项:

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

确保您的< code > @ part type(" text/plain ")继承自org.jboss.resteasy包!以及< code > @ multipart form (import org . JBoss . rest easy . annotations . providers . multipart . multipart form;)

有一个很好的例子是如何工作的:Quarkus教程。看看包装!

 类似资料:
  • 问题内容: 我在用Java应用程序服务器处理multipart / form-data请求时非常困难。从我发现的情况来看,servlet 3.0规范提供了诸如HttpServletRequest.getParts()之类的方法,这对于处理上传到我的servlet的表单数据是理想的。 但是,此方法是3.0 Servlet规范的一部分,并且我的应用程序服务器(Tomcat 6)尚不支持此方法。即使具有

  • 我正在使用Spring 5.0.1和servlet 3.1.0 但是当用户发送multipart/report(content-type)时,spring没有正确解析这个请求。 它没有给出任何例外情况,但是它没有在请求部分中存储任何内容。 request.getparts()将返回空数组。 是否需要进行任何配置,以便spring解析任何类型的多部分数据。 在下面张贴我的代码和请求负载: 与请求一起

  • 这是一个Spring集成(基于Spring Boot)项目,我已经配置了Spring集成应用程序,如下所示, 配置xml: CustomConverter定义如下 对于多部分/表单数据,我在CustomConverter类中总是得到一个空白负载。 我还尝试添加一个多部分解析器,如下所示 我在stackoverflow Spring Integrdsl上关注了一个类似的问题——HTTP入站网关使用m

  • 所以这个HTML代码以正确的格式提交数据给我。 谢了!

  • 如何使用ajax或XMLHttpRequest从javascript调用RESTAPI,以使用内容类型:multipart/form data上载文件。 文件内容是二进制格式的,但我调用的API具有以下请求格式:Authorization:Bearer 我使用以下代码段上传文件内容: 其中formData是二进制格式的文件内容。请建议这是正确的方法还是应该以不同的方式处理。我使用的文件类型是IFC

  • 通常,我需要通过JSOUP将数据以响应multipart/form-data的形式发送到站点 作为一个示例,使用一个简单的窗体来sgeniriruet您的查询。 <表单操作=«localhost:8000»方法=«post»enctype=»多部分/表单数据» <输入类型=»文本»名称=»文本»值=»文本默认值» <输入类型=»文件»名称=»文件1» <输入类型=»文件»名称=»文件2» 提交 通