LINUX.ORG.RU

[jsp] MultipartRequest


0

1

Здравствуйте.
Для загрузки нескольких файлов использую MultipartRequest (из com.oreilly.servlet) - по сути обертка вокруг HttpRequest. Файлы заливает отлично, все работает.
Но возник вопрос - как узнать, какой файл соответствует какому file input'у ?

Допустим, есть форма с 3мя file input'ами:

<input type="file" name="file_1"/>
<input type="file" name="file_2"/>
<input type="file" name="file_3"/>

В обработчике:
Enumeration uploaded_files = multi.getFileNames();
uploaded_files - Hashtable$Enumerator.
Если верить дебаггеру, то в нем есть:
- хеш-таблица вида 'file_3' => File (имя файла и тд), 'file_2' => File etc. Элементы идут в обратном порядке.
- еще есть поле lastReturned ( 'file_3' => File), которое содержит последний возвращенный элемент

Вызывая в цикле uploaded_files.nextElement() я пробегаю по всем этим файлам и переименовываю их. Проблема в том, чтобы узнать, какой файл какому file input'у соответствует.
nextElement() возвращает лишь имя файла, сам файл забираю по multi.getFile(name).
Судя по дебаггеру, ключем хеш-таблицы как раз и является имя file input'а. Только вот как получить этот ключ, соответствующей этому самому nextElement'у?

★★★★★

commons-fileupload не предлагать?

phoenix ★★★★ ()
Ответ на: комментарий от phoenix

Лучше не предлагать =) Сначала с ним делал, но там гемора много было с обработкой других полей формы (по крайней мере мне так показалось). Хотелось бы с MultipartRequest'ом сделать все.

kovrik ★★★★★ ()

В общем разобрался с проблемой.

Enumeration uploaded_files = multi.getFileNames();
Hashtable filenames_table = new Hashtable();

// пробегаем по файлам
while (uploaded_files.hasMoreElements())
{
  // в name записываем имя file input'а (а не файла!)
  String name = (String)uploaded_files.nextElement();
 
  // берем файл
  File uploadedFile = multi.getFile(name);
  
  if (uploadedFile != null)
  {
    // берем имя файла
    fileName = uploadedFile.getName();
    ...
    // добавляем в хеш-таблицу пару имя file input'а (ключ) - имя файла (значение)
    filenames_table.put(name, fileName);
  }

}
...
В результате в хеш-таблице filenames_table будут хранится и имена input'ов и соответствующие им имена файлов.

kovrik ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.