Vertx - 限制上传文件类型

Vertx - Restrict Upload file type

我正在使用 Vertx 创建一个 API 让用户上传图片,但我想限制某些文件类型 - jpg|Jpeg|png.

最好的方法是什么?

private void uploadLogoHandler(RoutingContext context) {
   //Filter content type

}

我不知道 "best" 的方法。但这里有一些选择

[1] 在客户端上,在允许用户上传之前查看文件的扩展名(隐藏最后的上传按钮,并且只在 select 具有正确扩展名的文件名之后显示).您可以在客户端执行此操作 javascript,您无法访问文件的完整路径,但可以访问文件名(减去路径)。

[2] 在服务器上做同样的事情。你应该能够在多部分上传中获取文件的名称。

[3] 在上传过程中没有简单的方法来检查实际文件类型。我会做的(如果你正在检查图像)是将它写入一个临时文件,然后 运行 Java ImageIO 来读取图像。如果读取没有错误,那么它是一个图像,如果不是,你会得到一个异常,并删除文件。我不知道这样做有安全问题。注意通过ImageIO读取文件是一个阻塞操作,所以放在一个vert.x execute blocking.

HTML:

<input type="file" name="myImage" accept="image/*" />

在 vert.x 我们需要检查上传文件的内容类型,假设我们只有一个上传:

Set<FileUpload> fileUploads = routingContext.fileUploads();
FileUpload fileUpload = fileUploads.iterator().next();
fileUpload.contentType();
if(!fileUpload.contentType().startsWith("image/")){
    routingContext.response().putHeader("content-type", "text/html").end("Please upload an image.");
}else{
    // Process your image
}