【问题标题】:Getting parameter value in request in Multipart file upload form request [duplicate]在多部分文件上传表单请求中获取请求中的参数值[重复]
【发布时间】:2017-05-19 16:44:10
【问题描述】:

我在 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 中获取&lt;input id="fileprogramtype" type="text" name="programtype" style="display: none;"/&gt; 的值

我试过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);
                }
            }

它甚至没有进入循环。

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

【问题讨论】:

    标签: javascript java jsp servlets


    【解决方案1】:

    使用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();
         ... }
    

    【讨论】:

      【解决方案2】:

      知道如何获得<input id="fileprogramtype" type="text" name="programtype" style="display: none;"/> 的值 处理上传

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

      你确定你得到null,因为根据Java Doc for ServletRequest#getRequestParameter method

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

      如果你不手动设置值,你可以获得一个空白值,因为它是一个隐藏字段,但你不会得到一个空值。

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

      【讨论】:

      • 您是否尝试过使用多部分表单数据?因为它不适用于那个
      • @tima 是的,我只尝试了多部分形式。请检查此documentation
      • 这很奇怪,我得到null,即使我使用注释配置了servlet。
      • 是的,我得到了 null.. 我得到了答案..
      猜你喜欢
      • 2016-06-29
      • 2021-09-24
      • 2013-03-30
      • 2017-10-05
      • 2017-02-20
      • 2014-06-01
      • 2018-06-10
      • 2019-10-13
      • 2017-02-11
      相关资源
      最近更新 更多