java - 将 jsp 多部分/表单数据表单中的输入值发送到 servlet

标签 java forms jsp servlets

<分区>

我有一个包含表单的 JSP

        <form action="upload" method="post" enctype="multipart/form-data">
        <fieldset>
            <input name="nom" class="input-xlarge focused" id="nom" type="text" value=""> 
            <input name="date" class="input-xlarge focused" id="date" type="text" value="">
            <input type="file" name="file" /> 
            <button type="submit" class="btn btn-primary">Envoi</button>
        </fieldset>
    </form>

其中包含 2 个字段(名称和日期),还要求将文件上传到服务器。

在 servlet 方面,我有以下内容:

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    String UPLOAD_DIRECTORY = request.getServletContext().getRealPath("/")+"imgs/";
    //process only if its multipart content
    if(ServletFileUpload.isMultipartContent(request)){

        String nom = request.getParameter("nom");
        String date = request.getParameter("date");
        log.debug("upload parameters: "+nom+" "+date);


        try {
            List<FileItem> multiparts = new ServletFileUpload(
                                     new DiskFileItemFactory()).parseRequest(request);

            for(FileItem item : multiparts){
                if(!item.isFormField()){
                    String name = new File(item.getName()).getName();
                    item.write( new File(UPLOAD_DIRECTORY + File.separator + name));
                }
            }

           //File uploaded successfully
           request.setAttribute("message", "File Uploaded Successfully");
           log.debug("File updated successfully");
        } catch (Exception ex) {
           request.setAttribute("message", "File Upload Failed due to " + ex);
           log.debug("File upload failed: "+ex);
        }          

    }else{
        request.setAttribute("message",
                             "Sorry this Servlet only handles file upload request");
        log.debug("file upload only !");
    }

    //request.getRequestDispatcher("/result.jsp").forward(request, response);

}

文件上传工作正常,但我无法使用 request.getParameter 检索我的两个参数(名称和日期)。

我可以检索 multipart/form-data 中的参数吗?我该怎么做?

最佳答案

在使用 enctype="multipart/form-data" 时,您不能使用 request.getParameter("nom"); 直接获取参数。

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

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

关于java - 将 jsp 多部分/表单数据表单中的输入值发送到 servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39231322/

相关文章:

java - CDI 生产商利益

Java 混淆,专注于添加无用的操作码

javascript - 当用户单击表单输入字段时添加和删除 CSS 类选择器 - 示例

javascript - 获取特定 div 的子元素中输入字段的值

javascript - Chrome form.submit() 处理程序忽略必填字段

java - SQL异常错误

java - NiftyGui - 如何改变面板的大小

java - HTTP 状态 404 : The requested resource is not available

javascript - 在 JSP 中通过 JavaScript 访问 ModelMap 列表

java - 无法访问jsp页面