在 Servlet 中,"request.getParts().stream()..."添加一个 "empty" Part 对象



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

<form method="post" action="linkToAction" role="form" enctype="multipart/form-data">
<input name="files" type="file" class="form-control-file" multiple="true" >
</form>

阅读此答案,在我的servlet中,我上传了文件:

List<Part> fileParts = request.getParts().stream().filter(part -> "files".equals(part.getName())).collect(Collectors.toList());

如果用户不上传任何内容,我希望List<Part> fileParts为空!但是,它并不像上面语句在列表中添加的那样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
}
}

但是,为什么会这样呢?

您需要检查Part#getSize()是否大于0

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

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

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

List<Part> fileParts = request.getParts().stream()
.filter(part -> "files".equals(part.getName()) && Objects.nonNull(part.getName()))
.collect(Collectors.toList());

相关内容

  • 没有找到相关文章

最新更新