【问题标题】:FileUpload isFormField() returning true when submitting fileFileUpload isFormField() 在提交文件时返回 true
【发布时间】:2013-07-30 11:48:53
【问题描述】:

我正在使用Apache-Commons FileUpload library 将文件上传到服务器。它工作正常,但突然当我提交文件时,FileItem.isFormField() 出于某种原因返回 true。这是我的代码

FileUpload.java servlet

if (ServletFileUpload.isMultipartContent(request)) 
{
    List<FileItem> items = new ServletFileUpload(
                   new DiskFileItemFactory()).parseRequest(request);

    for (FileItem item : items)
    {
        // if item is a file type and not a form field 
        if (!item.isFormField())
        {
                // UPLOAD FILE
        }
    }
}

ticketform.jsp

<form action="upload" enctype="multipart/form-data" method=post>
    <button type="button" id="clip-btn" class="attach-tool-tip" >
        <img src="images/attachment.png" id="attach-img" width="25px"/>
    </button>

    <input id="attach-btn" type="file" style="display:none"/>
    <input id="submit-form" name="upload" type="submit" style="display:none"/>
</form>

ticketform.js

// trigger file chooser click when clicking paper clip icon
$('#clip-btn').click(function()
{
    $('#attach-btn').trigger('click');
});

// trigger file submit on filename change in input type='file'
$('#attach-btn').change(function()
{
    $('#submit-form').trigger('click');
});

当我看到“attach-btn”的内容(即输入文件类型)时,该文件的名称、最后修改时间、大小等都正确无误。因此它正在提交正确的文件。解析请求时,是否有任何外部原因将其计为表单字段?

【问题讨论】:

  • 能否请您运行不隐藏文件字段的显示,并告诉我们它是否仍然不起作用?
  • 我将文件字段从隐藏状态中移除并改用它。我注意到页面正在另一次刷新,即正在提交另一个请求,但我不知道从哪里来
  • 尝试添加以下代码:$("#submit-form").click(function(event) { event.preventDefault(); $('#myform').submit(); }) ;
  • 并将 id='myform' 属性添加到您的表单中。这将只提交一次表单
  • 因为按钮的类型是submit,所以提交了两次。这将在单击后提交表单,并在处理程序中提交一次

标签: java html jsp http servlets


【解决方案1】:

也许这是一个错字,但您缺少“名称”属性,这是强制性的。

<input id="attach-btn" type="file" name="someFile" style="display:none"/>

经过一些测试,在字段中没有名称,file input 不包含在List&lt;FileItem&gt; 中。您只收到带有默认值的submit input(在我的情况下类似于“发送请求”)。

试一试,告诉我们它是否有效。

【讨论】:

  • 是的,它成功了!非常感谢@Nefreo!我不知道这个名字是强制性的,因为我没有直接使用它!
  • 您可以将“上传”名称从提交切换到文件输入。该名称对于表单上的“成功控制”是必需的。见The W3C Specification。很高兴有帮助!
猜你喜欢
  • 2014-07-20
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2017-11-24
相关资源
最近更新 更多