我的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
之前验证文件的类型,以便我可以拒绝除图像以外的任何其他文件上传?