如何设置是否设置了HttpServletRequest getPart(“...”)

时间:2018-01-14 23:05:09

标签: java forms jsp servlets

我正在将CSV文件上传到Java servlet。 我的HTML表单如下所示:

<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file">
<input type="submit" name="submitBt" id="submitBt">
</form>

在我的servlet中,我执行以下操作来检索文件:

public void uploadCsv(HttpServletRequest request) {
request.getPart("file")
...
}

设置文件后,servlet会正常工作,一切正常。

我的问题是,我在同一个JSP中有第二个表单。 因此,当提交表单时,我想测试是否设置了包含CSV文件的名为“file”的输入。

我尝试了以下内容:

if (req.getParameter("file") != null)

始终为假

if (request.getParameterMap().containsKey("file"))

总是假的

if (req.getPart("file") != null)

如果未设置文件

,则会引发异常

帮助! d:

3 个答案:

答案 0 :(得分:0)

您需要使用@MultipartConfig为您的servlet添加注释,以便让它识别并支持multipart/form-data个请求,从而让getPart()正常工作

提交空字段与不提交字段不同。

  • 如果某个字段未填写但已提交,则最终为空字符串
  • 如果某个字段未提交,则为null

所以你可以检查这个值是不是一个空字符串

String file = request.getParameter("file");

if (file != null && !file.isEmpty()) {
    // It's submitted and filled
}

您可以使用accept属性指定服务器接受的文件类型(可以通过文件上传提交)。

<input type="file" accept=".csv" />

注意:

  • accept属性只能与<input type="file">
  • 一起使用
  • 请勿将此属性用作验证工具。应在服务器上验证文件上传。

<强>更新

您可以使用javascript验证强制要求文件上传字段

function validate(){
    var inputField = document.getElementById('upload');
    if(inp.files.length == 0){
        alert("Attachment Required");
        inputField.focus();
        return false;
    }
}
<form enctype="multipart/form-data" method="post" onsubmit="return(validate());">
    <input name="file[]" type="file" multiple="multiple" id="upload">
    <input type="submit" value="Submit"/>
</form>

看一下这个答案How to upload files to server using JSP/Servlet?

答案 1 :(得分:0)

检查是否设置了部件的(脏)方式, 因为req.getPart(&#34; file&#34;)会引发异常:

boolean isSet = false;
try {
    req.getPart("file");
    isSet = true;
} catch(Exception e) { 
    isSet = false; 
}

if (isSet) {
    // Do your work
}

答案 2 :(得分:0)

表单部分像文件一样发送到服务器,因此您可以执行此操作...

boolean isthereafile;
if(request.getPart("file").getSize()>0){
isthereafile = true;
}
if(request.getPart("file").getSize()<=0){
isthereafile = false;
}