POST表单上的NPE提交multipart / form-data

时间:2017-01-17 09:00:50

标签: forms jsp servlets file-upload multipartform-data

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

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

我遇到一个案例,在尝试从NullPointerException HttpServletRequest检索部件时抛出了request.getPart()

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

因此,我可以重新创建此问题的唯一方法是操纵html(通过我的浏览器的html编辑工具)并手动删除文件name元素的input属性(即:更改{ {1}}为空字符串)。

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

谢谢。

更新 相关的html :(使用bootstrap collapse来显示文件name元素) (数据属性是针对javascript的 - 也许带引号的内容会弄乱input属性?)

name

相关Servlet代码:(调用<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> 抛出getSubmittedFileName()

NPE

1 个答案:

答案 0 :(得分:1)

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

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

javascript

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

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

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