Vertx - 限制上传文件类型

时间:2017-03-29 00:23:16

标签: java vert.x

我使用Vertx创建API以允许用户上传图片,但我想限制为某些文件类型 - jpg|Jpeg|png

最好的方法是什么?

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

}

2 个答案:

答案 0 :(得分:2)

我不知道采用“最佳”方式。但这里有一些选择

客户端上的

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

[2]在服务器上执行与上述相同的操作。您应该能够在多部分上传中获取文件的名称。

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

答案 1 :(得分:2)

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
}