如何验证在vertx中上传多部分/表单数据的文件类型?

时间:2019-06-03 07:55:53

标签: vert.x

我的Vert.x Web应用程序中包含文件上传的multipart / form。 我遇到的问题是,请求通过Vertx的BodyHandler后,似乎只能验证上传文件的类型。

现在,我可以在验证类型之后对其进行验证,但是BodyHandler已经在该时间点上传了文件。关于类似问题,有人指出您应该在BodyHandler之前使用自己的处理程序检查内容类型,但这总是返回空的formAttributes

我尝试创建自己的处理程序:

  public void handle(RoutingContext context) {

    context.request().setExpectMultipart(true);

    MultiMap attributes = context.request().formAttributes();
    System.out.println(attributes);

    context.next();

  }

但是attributes始终为空,因此我无法验证上传文件的内容类型。

在它通过BodyHandler进入我的其他处理程序之后,它可以正常工作:

      MultiMap attributes = context.request().formAttributes();
      Set<FileUpload> uploads = context.fileUploads();
      for (FileUpload file : uploads
           ) {
        System.out.println(file.contentType());
        // This returns image/jpeg
      }

      context.response().end();

但是如上所述,该文件通过BodyHandler时已经上传。

以下是处理程序的代码:

router.post("/api/someendpoint").handler(new FileTypeHandler());
router.post("/api/someendpoint").handler(BodyHandler.create()
      .setUploadsDirectory("static/images")
      .setBodyLimit(MB * 1));
router.post("/api/someendpoint").handler(new EndPointHandler());

如何在文件上传通过BodyHandler之前验证文件的类型,以便我可以拒绝除图像以外的任何其他文件上传?

0 个答案:

没有答案