我正在使用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
答案 0 :(得分:1)
这是由我设置的一些javascript验证引起的。
具体来说:在表单提交,检查文件大小,在Internet Explorer上,会导致问题中提到的NPE。
javascript
$("#form").submit(function(){
if ($("#some_file").files[0]) {
...
}
});
我不知道为什么会这样。
它并不是在Firefox中发生的。
为了解决这个问题,我检查了元素change
的有效性,而不是表单提交。
这不是一个理想的解决方案。我还在试图找出导致Internet Explorer出错的原因。