Servlets 在Servlet中;request.getParts().stream()…”;加上一个“;“空的”;部分对象

Servlets 在Servlet中;request.getParts().stream()…”;加上一个“;“空的”;部分对象,servlets,file-upload,Servlets,File Upload,在我的JSP中,我有一个用户可以上传文件的表单 <form method="post" action="linkToAction" role="form" enctype="multipart/form-data"> <input name="files" type="file" class="form-control-file" multiple="true" > </form> 如果用户没有上传任何内容,我希望列表文件部分将为空!但是,它并不像上面的

在我的
JSP
中,我有一个用户可以上传文件的表单

<form method="post" action="linkToAction" role="form" enctype="multipart/form-data">
  <input name="files" type="file" class="form-control-file" multiple="true" >
</form>
如果用户没有上传任何内容,我希望
列表文件部分将为空!但是,它并不像上面的语句在列表
fileParts
中所添加的那样,是一个空的
Part
。如果用户上载1个文件,上述语句将再次添加1个有效的
Part
对象

我想到的一个快速解决方案是检查文件名的长度:

for (Part filePart : fileParts) {
        String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); /
         if (fileName.length() != 0) {
                   //do my job here
         }
}

然而,为什么会发生这种情况

您可以在
本身中检查空条件

List<Part> fileParts = request.getParts().stream()
                                         .filter(part -> "files".equals(part.getName()) && Objects.nonNull(part.getName()))
                                         .collect(Collectors.toList());
List fileParts=request.getParts().stream()
.filter(part->“files”.equals(part.getName())&&Objects.nonNull(part.getName()))
.collect(Collectors.toList());
您需要检查是否大于
0

List<Part> nonEmptyFileParts = request.getParts().stream()
    .filter(part -> "files".equals(part.getName()) && part.getSize() > 0)
    .collect(Collectors.toList());
List nonEmptyFileParts=request.getParts().stream()
.filter(part->“files”.equals(part.getName())&&part.getSize()>0)
.collect(Collectors.toList());

同时,参考答案已更新,谢谢。

您知道为什么会发生这种情况吗?我遇到了类似的事情。但在我的例子中,我收到了部分文件名,但part.getSize()为零。@MudasirAli:很可能是特定浏览器中与自动填充或取消选择文件相关的bug。
List<Part> nonEmptyFileParts = request.getParts().stream()
    .filter(part -> "files".equals(part.getName()) && part.getSize() > 0)
    .collect(Collectors.toList());