JSP 表单发送数据,包括 servlet 中的文件

JSP form sending data including files in servlet

我正在尝试将一些数据从 jsp 表单发送到 servlet。我的所有数据都是 type="text" 除了一个 type="file”。我知道如果我想将数据发送到我的 servlet,我必须使用 request.getParameter(...)。(我的数据)在为了不为空,我必须使用 method="get"。但如果我想上传文件,我必须使用 method="post"。我如何使用一种形式将两种类型传递给我的 servlet?提前致谢!

.jsp

<form method="post" action="Servlet">
user:<input type="text" name="user"/>
img<input type="file" name="img"/>
</form>

Servlet.java

doPost(req,resp){
user = req.getParameter("user");//user == NULL
}

.jsp

<form method="get" action="Servlet">
user:<input type="text"/>
img<input type="file"/>
</form>

Servlet.java

doGet(req,resp){
//img not passed
}

表格:

<form id="uploadForm" name="uploadForm" action="UploadServlet" method="post" enctype="multipart/form-data">
    user:<input type="text" name="user"/>
    img<input type="file" name="image"/>
</form>

您仍然可以通过 post 请求获得两者:

protected void doPost(HttpServletRequest request, HttpServletResponse response) {
    List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
    InputStream fileContent = null;
    String user = "";
    for (FileItem item : items) 
    {
        if (item.isFormField()) 
        {
            String fieldName = item.getFieldName();
            String fieldValue = item.getString();
            if(fieldName.equalsIgnoreCase("user"))
            {
                user = fieldValue;
            }
        }
        else 
        {
            String fieldName = item.getFieldName();
            if(fieldName.equalsIgnoreCase("image"))
            {
                fileContent = item.getInputStream();
            } 
        }
    }
}

这只是一个如何处理 post 文件类型请求的示例。