如何使用O'Reilly的多部分表单servlet库获取多值参数?



我正在使用O'Reilly的Servlets多部分表单库来处理文件上传。我发现它有用且可实现,但我面临着一个我无法解决的问题。这是关于多值参数(例如多选)。我正在解析如下参数:

List<Units> unitsParams = new ArrayList<Units>();
while (mp != null && (part = mp.readNextPart()) != null) {
    if (part.isFile()) {//Es un fichero.
        FilePart filePart = (FilePart) part;
        if (filePart.getContentType().equals("image/jpeg")) {
            InputStream pis = filePart.getInputStream();
            // It's a file, handle it
        }
    } else if (part.isParam()) { // Es un parametro
        // Handle the actual params
        String namePar = part.getName();
        ParamPart paramPart = (ParamPart) part;
        String valorPar = paramPart.getStringValue();
        boolean fin = null == valorPar;
        if (!fin) {
            if (namePar.equals("id")) {
                id = valorPar;
            } else if (namePar.equals("name")) {
                orgName = valorPar;
            } else if (namePar.equals("unitSelect")) {
                unitsParams.add(valorPar);
            }
        }
    }

对于多值参数,我认为它会迭代(发送不同的部分)与我发送的参数unitSelect的值数量一样多,但我只能得到一个值。

有没有人使用过这个库并遇到这个问题?我试图避免更改库,因为文件上传运行良好,并且为少数 servlet 更改代码的重要部分很痛苦。

欢迎任何建议。

谢谢。

我不使用O'Reilly多部分/表单数据解析器,原因是Apache Commons FileUpload被更广泛地使用并且仍然积极维护,并且从Servlet 3.0开始,您甚至可以使用内置方法,例如getPart(),而无需任何第三方库。

但是,在检查了Javadocs和示例之后,似乎您最好使用MultipartRequest类来收集参数。它提供了getParameter()getParameterValues()的方法。

MultipartRequest multipartRequest = new MultipartRequest(request, saveDirectory);
File file = multipartRequest.getFile("file");
String id = multipartRequest.getParameter("id");
String name = multipartRequest.getParameter("name");
String[] unitSelect = multipartRequest.getParameterValues("unitSelect");
// ...

另请参阅:

  • 如何使用JSP/Servlet将文件上传到服务器?

最新更新