Разрешить сервлету doPost обрабатывать загрузку файлов из igUpload в struts2

У меня возникли проблемы с загрузкой файлов с помощью Infragistics jQuery igUpload. Их элемент управления имеет приятный интерфейс с возможностью работы с несколькими файлами, индикаторами выполнения и т. д. Я уверен, что это может работать, но у меня должно быть что-то неправильно настроено.

Элемент управления igUpload имеет параметр uploadURL, который я установил для сервлета. (может быть, это ошибка № 1?) Красиво отформатированное сообщение POST отправляется с ожидаемыми параметрами, заголовком и файлом для загрузки в multipart/form-data. Мой сервлет получает запрос и обрабатывает его следующим образом:

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

// Check that we have a file upload request
if ( ServletFileUpload.isMultipartContent(request) ) {
    // Create a factory for disk-based file items
    DiskFileItemFactory factory = new DiskFileItemFactory();

    // Configure a repository (to ensure a secure temp location is used)
    ServletContext servletContext = this.getServletConfig().getServletContext();
    File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
    factory.setRepository(repository);

    // Create a new file upload handler
    ServletFileUpload upload = new ServletFileUpload(factory);

    // Parse the request
    List<FileItem> items = upload.parseRequest(request);
    for ( FileItem fi : items ) {
        String name = fi.getName();  // NEVER executed
    }
}

Проблема в том, что список FileItem всегда пуст. В отладке Eclipse, если я копаюсь в запросе, я вижу объекты DiskFileItem, все заполненные файлами, уже загруженными в

C:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\work\Catalina\localhost\MyApp

поэтому я предполагаю, что это означает, что что-то еще уже загрузило файлы.

Из этого сообщения Загрузка файла с помощью parseRequest ServletFileUpload? ответ был "это, скорее всего, потому что вы уже разобрали запрос ранее. Файлы являются частью тела запроса, и вы можете разобрать его только один раз». и «Вы были правы. Похоже, плагин загрузки файлов struts2 уже читает между ними».

Похоже, это то, что происходит со мной. Итак, как мне это исправить?

  • Должен ли элемент управления igUpload вместо этого указывать на URL-адрес действия struts?
  • Должен ли я каким-то образом отключить плагин загрузки файлов struts2, чтобы мой сервлет мог выполнять загрузку?
  • Должен ли я использовать другой пакет для синтаксического анализа или вручную выполнить через HttpServletRequest и обработать DiskFileItems, поскольку они уже назначены?

Спасибо за любое понимание.


person user3708842    schedule 20.01.2015    source источник