NPE POST 表单提交 multipart/form-data

NPE on POST form submit multipart/form-data

我正在使用 Jsps/Servlets 来允许用户上传图片(如此处概述:How to upload files to server using JSP/Servlet?

通常一切正常(我在适当的 servlet 上有 MultipartConfig 注释)。

我遇到一个案例,在尝试从 HttpServletRequest 中检索零件时抛出 NullPointerExceptionrequest.getPart()

根据文档,当 request 不包含 "requested part" (http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html#getPart(java.lang.String)) 时会发生这种情况。

因此,我重现此问题的唯一方法是操纵 html(通过我浏览器的 html 编辑工具)并手动删除文件 [=] 的 name 属性20=] 元素(即:将 name 更改为空字符串)。

我发现这不太可能是用户导致抛出异常的原因。是否有任何其他原因可能导致此错误发生?我想弄清楚是什么原因。

谢谢。

更新 相关html:(使用bootstrap折叠显示文件input元素) (数据属性用于 javascript - 也许带引号的东西与 name 属性混淆?)

<form role="form" action="/fileUploadServlet" method="post"
enctype="multipart/form-data"
data-min-length='${minLength}' 
data-max-length='${maxLength}'
data-msg="${valMsg}"
data-size="${maxSize}">
    <a href="#input_collapse" class="btn btn-default" data-toggle="collapse">
         Upload File
    </a>
    <span class="collapse" id="input_collapse">
         <input type="file" name="someFile" id="some_file">
    </span>
    ...[other form fields]
</form>

相关 Servlet 代码:(调用 getSubmittedFileName() 抛出 NPE

@MultipartConfig(maxFileSize = 1024*1024*5)
public class FileUploadServlet
{
...
try {
     Part filePart = req.getPart("someFile");
     ...filePart.getSubmittedFileName();

这是由我设置的一些 javascript 验证引起的。

具体来说:在 Internet Explorer 上提交表单时检查文件大小,导致问题中提到的 NPE。

javascript

$("#form").submit(function(){
    if ($("#some_file").files[0]) {
    ...
    }
});

我不知道为什么会这样。 它不会发生在 Firefox 中。 为了解决这个问题,我检查了元素 change 的有效性,而不是表单提交。

这不是一个理想的解决方案。我仍在尝试找出导致 Internet Explorer 出现错误的原因。