2011-01-12 5 views
0

У меня есть страница JSP, в которой у меня есть поле ввода файла, из которого я просматриваю файл csv, а затем загружаю его на сервер. Я использую метод = "POST" и ENCTYPE = 'multipart/form-data' в форме, в которой присутствует это поле ввода файла.Не удается получить содержимое файла на сервере во время загрузки

С сервлета (в сервлете приложения) Я использую API-интерфейс API-ServletFileUpload API для API-интерфейса API. После получения списка FileItem из метода parseRequest (запроса) этого API я не могу получить имя файла и его содержимое с помощью методов getName(), getString() API FileItem.

Необходимо знать, что я делаю неправильно или какие-либо изменения в моем подходе, которые заставят мое приложение работать. Любые указатели на это будут полезны.

Спасибо заранее!

пытались также следующий код в методе doPost главного сервлета приложения: -

`Перечисление enumAttrib = request.getAttributeNames();

while(enumAttrib.hasMoreElements()) { 
     String attribName = (String)(enumAttrib.nextElement()); 
     System.out.println("DEBUG:---------AttribName = " + attribName); 
     System.out.println("DEBUG:---------AttribValue=" + request.getAttribute(attribName)); 
    }` 

Вывод, который был напечатан был:

DEBUG:---------AttribName = weblogic.servlet.network_channel.port 
DEBUG:---------AttribValue=9703 

Не знаю, должен ли параметр запроса возвращать только этот или другие атрибуты также.

также попытался следующий код:

if (ServletFileUpload.isMultipartContent(request)) { 

     System.out.println("Inside ApplicationMainServlet request is multipart "); 

     // Create a factory for disk-based file items 
     FileItemFactory factory = new DiskFileItemFactory(); 

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

     try 
     { 
      // Parse the request 

      List /* FileItem */items = upload.parseReques(request); 

      // Process the uploaded items 

      Iterator iter = items.iterator(); 

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

       System.out.println("ApplicationMainServlet name: "+item.getFieldName() + ", val: "+item.getString()); 

       if (!item.isFormField()) 
       { 
        //Item is a file 

       try{ 

        InputStream is = item.getInputStream(); 

        InputStreamReader ir = new InputStreamReader(is); 

        BufferedReader br = new BufferedReader(ir); 

        System.out.println("br : " + br); 

        String fileContent = ""; 

        String strLine; 

        while((strLine = br.readLine()) != null){ 

         System.out.println("strLine : " + strLine); 

         if(fileContent != null) 
         { 
          fileContent = fileContent+ strLine + "\n"; 
         } 
         else 
         { 
          fileContent = strLine + "\n"; 
         } 
        } 

        System.out.println("fileContent : " + fileContent); 
        } catch(Exception e){ 
         e.printStackTrace(); 
        } 

        System.out.println("ApplicationMainServlet file name " + item.getName()+",size "+item.getSize());      

       } 
      } 
+0

Не могли бы вы отправить код для загрузки файла? – Casey

+0

public void doProcess (запрос HttpServletRequest, ответ HttpServletResponse) throws ServletException, IOException { – Khushal

+0

FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = новый ServletFileUpload (заводская); Список элементов = upload.parseRequest (запрос); Итератор iter = items.iterator(); while (iter.hasNext()) {FileItem item = (FileItem) iter.next(); if (! item.isFormField()) {// Выход, который печатается в журналах, равен Val = (blank) и size = 0 System.out.println ("ApplicationMainServlet: name =" + item.getFieldName() + ", val = "+ item.getString() +", размер файла = "+ item.getSize()); request.setAttribute (имя, элемент); // больше кода для последующего использования. – Khushal

ответ

0

Вы уверены, что ваш метод doProcess вызывается? Вы разместили какие-либо сообщения System.out в другом месте перед этим блоком кода или в нем?

Также как вы заявляете свою форму для загрузки файла? Вы должны установить enctype на форме multipart/form-data:

<form enctype="multipart/form-data" name="uploadForm" action="uploadFormAction"> 
</form> 

Похоже, ваш код в основном правильно на основе Apache documentation

if (!item.isFormField()) { 
    System.out.println("ApplicationMainServlet: name = " + item.getFieldName() + ", val = " + item.getString() + ", file size = " + item.getSize()); 
} 

Немного легче читать, может быть:

if (!item.isFormField()) { 
    String fieldName = item.getFieldName(); 
    String fileName = item.getName(); 
    long sizeInBytes = item.getSize(); 
    System.out.println("ApplicationMainServlet: name = " + fieldName + ", val = " + fileName + ", file size = " + sizeInBytes); 
} 

Сделайте снимок и посмотрите, работает ли он.

+0

Проблема в том, что я не могу отправить содержимое файла со стороны сервера.Я объявила форму, точно указанную вами. Метод doPost получает вызванное подтверждение из инструкций sysout в журналах. Элемент управления входит в условие if (! Item.isFormField()), но когда я пытаюсь получить имя_файла, размер или его содержимое, он ничего не печатает. Я также попытался получить inputStream на объекте FileItem и попытался распечатать содержимое файла по строкам, но это также не удается. – Khushal

+0

У меня возникает ощущение, что, поскольку содержимое Файла отправляется на сервер как поток MIME, нормальные методы для получения содержимого файла не работают. – Khushal

+0

Какой тип файла? Вы пробовали другой браузер? – Casey

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