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
中检索零件时抛出 NullPointerException
:request.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 出现错误的原因。
我正在使用 Jsps/Servlets 来允许用户上传图片(如此处概述:How to upload files to server using JSP/Servlet?)
通常一切正常(我在适当的 servlet 上有 MultipartConfig
注释)。
我遇到一个案例,在尝试从 HttpServletRequest
中检索零件时抛出 NullPointerException
:request.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 出现错误的原因。