在 Servlet 中,"request.getParts().stream()..." 添加了一个 "empty" Part 对象
In Servlet the "request.getParts().stream()..." adds a "empty" Part object
在我的 JSP
中,我有一个用户可以上传文件的表单。
<form method="post" action="linkToAction" role="form" enctype="multipart/form-data">
<input name="files" type="file" class="form-control-file" multiple="true" >
</form>
阅读此 answer,在我的 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
}
}
但是,为什么会这样呢?
您可以在 stream
本身检查空条件。
List<Part> fileParts = request.getParts().stream()
.filter(part -> "files".equals(part.getName()) && Objects.nonNull(part.getName()))
.collect(Collectors.toList());
您需要检查 Part#getSize()
是否大于 0
。
List<Part> nonEmptyFileParts = request.getParts().stream()
.filter(part -> "files".equals(part.getName()) && part.getSize() > 0)
.collect(Collectors.toList());
参考答案已更新,谢谢。
在我的 JSP
中,我有一个用户可以上传文件的表单。
<form method="post" action="linkToAction" role="form" enctype="multipart/form-data">
<input name="files" type="file" class="form-control-file" multiple="true" >
</form>
阅读此 answer,在我的 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
}
}
但是,为什么会这样呢?
您可以在 stream
本身检查空条件。
List<Part> fileParts = request.getParts().stream()
.filter(part -> "files".equals(part.getName()) && Objects.nonNull(part.getName()))
.collect(Collectors.toList());
您需要检查 Part#getSize()
是否大于 0
。
List<Part> nonEmptyFileParts = request.getParts().stream()
.filter(part -> "files".equals(part.getName()) && part.getSize() > 0)
.collect(Collectors.toList());
参考答案已更新,谢谢。