【问题标题】:How to check if HttpServletRequest getPart("...") is set or not如何检查是否设置了 HttpServletRequest getPart("...")
【发布时间】:2018-01-14 23:05:09
【问题描述】:

我正在将 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:

【问题讨论】:

    标签: java forms jsp servlets


    【解决方案1】:

    表单部分像文件一样发送到服务器,所以你可以这样做......

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

    【讨论】:

    • 我喜欢你的解决方案,它比我的要好得多:)
    • 这是吹毛求疵,但 getSize() 永远不会返回负值。
    【解决方案2】:

    您需要使用@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 属性只能与&lt;input type="file"&gt; 一起使用
    • 不要将此属性用作验证工具。文件上传应在服务器上进行验证。

    更新

    您可以使用 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?

    【讨论】:

    • 感谢您的 accept=".csv" 提示 :) 不幸的是(我用您的代码再次测试),request.getParameter("file") 始终为空,即使设置了文件也是如此我的表格。也许是因为我在表单中使用了 enctype="multipart/form-data" ...
    • 您是否使用 @MultipartConfig 注释您的 servlet 以使其识别和支持多部分/表单数据请求,从而使 getPart() 工作?
    • 不,不幸的是,无论有没有@MultipartConfig,这都是一样的。
    • 请看我分享的链接,对你有帮助。
    • 当使用@MultipartConfigreq.getPart("file")返回什么?
    【解决方案3】:

    检查是否设置了 Part 的(脏)方法, 由于 req.getPart("file") 抛出异常:

    boolean isSet = false;
    try {
        req.getPart("file");
        isSet = true;
    } catch(Exception e) { 
        isSet = false; 
    }
    
    if (isSet) {
        // Do your work
    }
    

    【讨论】:

      猜你喜欢
      • 2016-12-05
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      相关资源
      最近更新 更多