在Multipart文件上载表单请求中获取请求中的参数值

时间:2017-05-19 16:44:11

标签: javascript java jsp servlets

我在JSP中有一个表单

                   <form action="/view/tool/Process" method="post"
                        enctype="multipart/form-data" target="_blank">
                        <p class="bottomPadded">&nbsp;</p>
                        <input type="file" name="file" /> 
                        <input id="fileprogramtype" type="text" name="programtype" style="display: none;"/>
                        <p class="bottomPadded">&nbsp;</p>
                        <p class="generalContent bottomPadded"><input class="imageBtn" type="image" name="image" src="/images/upload.png" /></p>
                    </form>

为此,请求被映射为

    <servlet>
        <servlet-name>ProcessUpload</servlet-name>
        <servlet-class>view.tool.servlet.ProcessUpload</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>ProcessUpload</servlet-name>
        <url-pattern>/view/tool/Process</url-pattern>
    </servlet-mapping>

任何想法如何在ProcessUpload中获取<input id="fileprogramtype" type="text" name="programtype" style="display: none;"/>的值

我尝试request.getParamter("programtype"),它返回null。

我甚至尝试过

Collection<Part> parts = request.getParts();

            for(Part p : parts) {
                logger.info("Parts ::: "+p.getName());
                if ("programtype".equals(p.getName()))
                {
                    InputStream inputStream = p.getInputStream();
                    BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
                    programtype = br.readLine();
                    logger.info("Here is Program Type ::"+programtype);
                }
            }

它甚至没有进入内部循环。

有人可以告诉我多部分表单请求如何获取其他参数的值吗?

2 个答案:

答案 0 :(得分:0)

  

任何想法我怎样才能获得<input id="fileprogramtype" type="text" name="programtype" style="display: none;"/>的价值   ProcessUpload

是的,你可以过关  request.getParameter("programtype");

根据Java Doc for ServletRequest#getRequestParameter method

,您确定获得了null吗?
  

以String形式返回请求参数的值,如果是,则返回null   参数不存在。请求参数是额外信息   随请求发送。对于HTTP servlet,参数包含在   查询字符串或发布的表单数据。

如果您没有手动设置值,则可以获取空白值,因为它是隐藏字段但您不会获得空值。

在我的DEV环境中验证类似代码后回答相同问题

答案 1 :(得分:0)

使用enctype="multipart/form-data"时,您无法使用request.getParameter("programtype");。

直接获取参数

在这种情况下,表单字段不可用作请求的参数,它们包含在流中,因此您需要从流中获取它们。一种可能的方法是使用commons-fileupload。以下是官方文档中的示例代码(请参阅“处理上传的项目”部分)

// Process the uploaded items
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
    FileItem item = iter.next();

    if (item.isFormField()) {
        processFormField(item);
    } else {
        processUploadedFile(item);
    }
}

对于常规表单字段

 // Process a regular form field if (item.isFormField()) {
     String name = item.getFieldName();
     String value = item.getString();
     ... }