4

更新:问题最终出在 Flash 组件本身。它没有正确编译元素中的多个值。我通知了开发人员,他们实施了一种解决方法。Commons FileUpload 确实支持每个接受的答案的多个值。

我有一个表格enctype="multipart/form-data",其中有一个

<select name="XX" multiple="multiple">

以及允许用户选择多个文件的 Flash 上传组件。使用 Apache Commons FileUpload 处理 POST 时,我通过以下方式检测选择字段

item.isFormField() == true

并继续通过以下方式提取详细信息

// Process a regular form field
if (item.isFormField()) {
    String name = item.getFieldName();
    String value = item.getString();
}

我遇到的问题是item.getString(); 仅返回选择字段中的第一个选定值;无论我选择多少物品,我都只得到第一个物品。

同样,当我使用标准 servlet 方法进行参数提取时,即。

final String[] values = request.getParameterValues("XX");

values 是空的,我认为这是因为表单是多部分编码的。

如何从我的多选字段中检索这些多个选定的值?

这个(未回答的)问题也由另一位作者在 Sun 论坛上提出。

4

2 回答 2

4

上面的链接不起作用,如果其他人面临同样的问题,这里是如何获取所有值 -

使用 Commons File Upload 从选择字段中检索多个值 -

   List items = upload.parseRequest(request);
   Iterator iter = items.iterator();

    while (iter.hasNext()) {
        FileItem item = (FileItem) iter.next();

        if (item.isFormField()) {
           String name = item.getFieldName();
           String value = item.getString();

        if (name.equals("multi-select"))
            completeSet = value;
     }

那么 completeSet 将只有第一个值。多选的所有其他值也在同名的项目中(这里是多选)。因此,您所要做的就是一一获取所有值,然后将其转换为所需的数据类型(即-收集列表中的所有内容并将其转换为 String[] :))例如-

List<String> completeSet=new ArrayList<String>();
if(name.equals("multi-select"))
     completeSet.add(value);

这样最终 completeSet 将拥有所有值集。

于 2016-10-07T07:29:24.453 回答
2

实际上,多个项目可以具有相同的 fieldName,您只需将同一 fieldName 的所有项目字符串值添加到 String 集合中,然后将该集合转换为数组。

在那里找到了一些信息: http ://www.nabble.com/RES:-File-Upload-td25910926.html

于 2009-10-24T14:31:11.187 回答