2011-09-13 2 views
2

У меня есть HTML-страницы, как это:Прочитайте файл пост в HTTPServletRequest

<FORM METHOD="POST" ACTION="http://localhost:8080/Appli/page/public/envoiPjExterne.seam" enctype="multipart/form-data"> 
    <input type="file" size="70" name="file" /><br />  
    <INPUT type="submit" value="Submit"> 
</FORM> 

и сервлет, как это:

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

DiskFileUpload upload = new DiskFileUpload(); 
upload.setSizeMax(10000000);// 10 Mo 
List items; 
try { 
     items = upload.parseRequest(request); 
     Iterator itr = items.iterator(); 
     while(itr.hasNext()) { 
      FileItem item = (FileItem) itr.next(); 
     } 
    } catch (FileUploadException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

Мой список «пунктов» всегда пусто!

ответ

0

Это может произойти, если у вас есть Filter в цепочке запроса-ответа, которая уже автоматически анализирует multipart/form-data запросов. Поскольку органы запроса могут анализироваться только один раз (клиент не будет повторно отправлять загруженный файл несколько раз), вторая попытка проанализировать его не приведет к чему-либо.

Расширение файла в действии URL-адреса формы envoiPjExterne.seam предполагает, что вы используете JSF/Seam. Это часто идет рука об руку с RichFaces, который действительно поставляется с подобным фильтром.

Есть 2 способа решения этой проблемы:

  • Не представить вид JSF/Seam. Сопоставьте сервлет по уникальному шаблону URL, который не покрывается JSF/Seam, и пусть вместо этого появится действие формы. Например. action="uploadServlet".

  • Не используйте сервлет для обработки загрузки файла. Используйте собственный компонент <rich:fileUpload> RichFaces с простым компонентом поддержки JSF.

Смежные вопросы