多部分/form-data不支持request.getParameter请求

11

我有一个表单,其中包括文件上传部分和几个输入字段。我正在使用request.getParameter()从jsp获取值到servlet中。但是当我添加encrypt=multipart时,request.getParameter()不起作用,它返回null。我知道multipart不支持request.getParameter()。是否有任何解决文件上传的方案,同时我也想使用request.getParameter()

4个回答

9

针对这种需求,Apache Commons库会非常有用。

参考链接:http://javakart.blogspot.in/2012/11/file-upload-example-using-servlet.html http://www.tutorialspoint.com/servlets/servlets-file-uploading.htm

boolean isMultipart = ServletFileUpload.isMultipartContent(request); 
//this will help you identify request is of type multipart or not.

一旦您检查请求,使用库解析请求并获取表单字段和文件项。

例如:

List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
        for (FileItem item : items) {
            if (item.isFormField()) {
                // Process regular form field (input type="text|radio|checkbox|etc", select, etc).
                String fieldname = item.getFieldName();
                String fieldvalue = item.getString();
                // ... (do your job here)
            } else {
                // Process form file field (input type="file").
                String fieldname = item.getFieldName();
                String filename = FilenameUtils.getName(item.getName());
                InputStream filecontent = item.getInputStream();
                // ... (do your job here)
            }
        }

我已经更新了我的答案,请尝试效仿一下。 - Jayesh
我想要使用request.getparameter。所以我使用了两个servlet。一个servlet用于使用request.getparameter获取所有文本字段值。另一个servlet用于处理文件上传。现在我的jsp页面包含两个表单。但问题是我想使用一个提交按钮。当点击提交按钮时,表单数据将发送到数据库。当点击上传按钮时,文件保存在文件夹中。如何使用一个按钮实现这一点? - user2599229
我正在获取文本字段的值,例如:String event_name = request.getParameter("event_name"); String where = request.getParameter("where"); 然后,我使用以下代码检查按钮名称 if (request.getParameter("btn").trim().equals("Submit")) {//code } 但我不知道如何使用上述示例来处理它。这就是为什么我尝试使用两个表单的原因。 - user2599229
真的不太明白你的意思,你有看过我发布的代码吗?里面有写到要像 request.getParameter("where") 这样读取。你已经有了这段代码,在这里你会得到同样的东西:String fieldname = item.getFieldName(); String fieldvalue = item.getString(); 试着使用 System.out.println(fieldName + "=" + fieldValue ); 打印一次 fieldName 和 fieldValue,看看是否有输出。 - Jayesh
我有多个提交按钮,例如<input type="submit" value="提交" name="btn"/> <input type="submit" value="保存为草稿" name="btn" />。因此我必须使用request.getParameter("btn").trim().equals("提交"){do this},request.getParameter("btn").trim().equals("保存为草稿"){do this}。那么我该如何处理呢? - user2599229
显示剩余5条评论

3

request.getParameter()及其相关方法无法处理多部分请求,当处理多部分表单数据时,它们总是返回null。

如果您想使用request.getParameter(),则可以使用commons FileUpload


3

这解决了我的问题。非常感谢 :) - Van Minh Nhon TRUONG

1
当您使用多部分时,您的表单字段将包含在请求流中。因此,您需要检查它们是否是表单字段。 请参见此答案。

我需要使用多部分表单数据将图像作为正文发送带有POST参数的请求,请您指导我如何实现此功能。 - karan421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接