繁体   English   中英

在 enctype="multipart/form-data" 请求不起作用之后

[英]after enctype="multipart/form-data" request not working

public class Relay extends HttpServlet {   
    @Override
    public void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        String command = request.getParameter("command");
        RequestDispatcher rd =request.getRequestDispatcher(command);
        rd.forward(request, response);
        System.out.println("Request forwarded to " + command + " servlet");
    }
}

这是我的中继 servlet,我从这个表单发送数据

<form action="Relay" method="POST" enctype="multipart/form-data"> /
    <input type="hidden" name="command" value="AddProduct" />
    <input type="text" name="pname" value="" />
    <input name="" type="submit" value="Add Product">
</form>

它抛出一个java.lang.NullPointerException

但是当我删除它时工作正常:

enctype="multipart/form-data"

那为什么需要添加呢? 把它放在外面。

如果您需要它以便通过<input type="file">上传您打算稍后添加的<input type="file"> ,那么您应该在您的 servlet 上放置@MultipartConfig注释,以便request.getParameter()将起作用并且所有上传的文件可以通过request.getPart()检索。

@WebServlet("/Relay")
@MultipartConfig
public class Relay extends HttpServlet {   
    // ...
}

也可以看看:

使用multipart/form-data编码的参数在 POST 正文中发送 - 不是作为常规请求参数,因此无法使用request.getParamter(...)读取。

查看Commons 文件上传包以进行多部分请求处理。

我包括这个只是为了提供故障排除的附加信息。 如果您遇到困难并想知道通过多部分请求获得的所有参数是什么,您可以使用以下代码打印所有参数。

MultipartRequest multi = <Your code to retrieve multipart request goes here. Sorry but can not post code as I use proprietary APIs>  

Enumeration en1 = multi.getParameterNames();
        while (en1.hasMoreElements()) { 
            String strParamName = (String)en1.nextElement(); 
            String[] strParamValues = multi.getParameterValues(strParamName); 

            for (int i = 0; i < strParamValues.length; i++) { 
            System.out.println(strParamName + "=" + strParamValues[i]); 
            } 

        }

删除表单标签并使用

echo <?php form_open_multipart('Controller/function');

每当我使用enctype="multipart/form-data"时,我都遇到了同样的问题,我没有得到文件名,当我删除它时,它工作正常,试试它对我有用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM