Что «ест» мой uploadFile до того, как мой сервлет POST сможет его обработать?
Я использую igUpload Infragistics IgniteUI на своей веб-странице для загрузки файлов на наш сервер Apache Tomcat, и пока файлы загружаются, я не могу получить к ним доступ в своем коде сервлета. Может быть, кто-то здесь имеет представление о том, что происходит.
Когда igUpload отправляет файл через Ajax, я вижу красиво сформированный POST-запрос с заголовками:
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Content-Length 24804
Content-Type multipart/form-data; boundary=---------------------------91823184012919
Cookie JSESSIONID=BB4D29EEA9C703CA529EA48E74413A72
Host localhost:8080
Referer http://localhost:8080/MyApp.html
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0
и пользовательский файл в разделе «Post» с таким «заголовком»:
-----------------------------91823184012919 Content-Disposition: form-data;
name="uploadDoc_0__frm_if"; filename="UsersFile.xls" Content-Type: application/vnd.ms-excel
Мой сервлет затем вызывается, но когда я использую это (фрагмент кода из FileUpload doc):
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);
Список товаров ВСЕГДА пуст. Тем не менее, в отладке Eclipse я могу ВИДЕТЬ глубоко в объекте Request DiskFileItem, который указывает на файл пользователей, который был сохранен во временном каталоге. Из этого постаЗагрузка файла с помощью parseRequest от ServletFileUpload? похоже, что struts2 забирает файл, прежде чем мой сервлет получит шанс. Поэтому я посмотрел в Struts2 FileUploadInterceptor и не нашел много. Я переписал его своим собственным перехватчиком, и он никогда не вызывался. Я получил источник FileUpload, чтобы я мог установить точки останова, и он никогда не вызывается во время этого процесса fileUpload. Первый код, который я вижу, выполняется, это мой сервлет, и к этому моменту файл уже обработан.
Итак, ЧТО на самом деле ест / загружает / хранит мой файл, и как мне остановить его или работать с ним, чтобы я мог фактически использовать загруженный файл?
Спасибо за понимание.
================================ РЕДАКТИРОВАТЬ ================= =================
Я добавил константу struts.xml из ответа @Andrea Ligios ниже для моего сервлета, и это не сработало. Затем я проверил файл web.xml, и он имел эти строки фильтра, кроме
org.apache.struts2.dispatcher.FilterDispatcher
Однако я заметил, что моя версия Struts - 2.3.4, в которой должно быть НОВОЕ имя, указанное в вашем ответе. Я изменил имя фильтра на новое, которое вы указали, и теперь оно работает!
Однако, похоже, мне приходится много работать вручную. Причина, по которой я не использую встроенную функцию, заключается в том, что я использую описанный здесь элемент управления Infragistics jQuery igUploadhttp://www.igniteui.com/file-upload/overview и здесьhttp://help.infragistics.com/Doc/jQuery/2014.2/CLR4.0?page=igUpload_igUpload.html , При использовании этого элемента управления он отправляет сообщение POST, как я описал в моем вопросе. Я предполагаю, что это сделано для работы с ASP.NET MVC Helper, и я даже не знаю, что это такое. Infragistics IgniteUI никогда не упоминает распорки в своей документации. Учитывая, что я использую igUpload, можете ли вы сделать какие-либо другие предложения, чтобы сделать это проще?