【问题标题】:NPE on POST form submit multipart/form-dataPOST 表单上的 NPE 提交多部分/表单数据
【发布时间】:2017-06-01 06:20:14
【问题描述】:

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

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

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

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

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

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

谢谢。

更新 相关html:(使用引导折叠显示文件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();

【问题讨论】:

  • 你的代码在哪里?您是否希望我们拥有一个水晶球,或者某种神奇的感觉,能够在没有它的情况下“调试”您的代码?
  • 在问题中添加了代码。
  • 在哪种情况下会出现问题,您能否将问题详细信息与您的 servlet 代码一起发布?
  • 您好,问题发生在用户提交表单时。上面的 servlet 代码是检查的第一件事,它会抛出 NPE(意味着输入的其余字段不相关)...谢谢。

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


【解决方案1】:

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

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

JavaScript

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

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

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

【讨论】:

    猜你喜欢
    • 2013-03-06
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 2017-07-02
    • 2021-12-12
    • 2022-11-22
    相关资源
    最近更新 更多