2016-03-22 6 views
0

Ich lade eine Excel-Datei in ein Servlet hoch und versuche, den Inhalt zu lesen. Ich kann die Datei hochladen und an das Servlet senden. Über das Servlet kann ich den Upload als Teil abrufen und dessen Namen, Dateigröße und Inhaltstyp korrekt lesen. Aber wie benutze ich dieses 'Teil', um es als Datei zu lesen?Konvertieren eines Teils in Datei und Lesen der Excel-Datei

Ich versuche POI zu verwenden, um die Excel-Datei zu lesen. Es erfordert, dass ich eine Datei übergebe, also übertrage ich den "Part" und wirf ihn als Datei. Zur Laufzeit gibt es eine Exception, die mir sagt, dass Casting nicht erlaubt ist.

Ich sehe keine request.getFile-Option. Ist es irgendwie nötig, diesen Part zu einer Datei zu machen? Oder eine andere Möglichkeit, Datei anstelle von Part anzufordern. Bitte um Rat.

<!-- HTML --> 
    <form method="post" action="MyServlet" enctype="multipart/form-data"> 
     <input type="file" name="file" id="file"> 
     <button type="submit">Send</button> 
    </form> 

    //Servlet 
public class ExcelUploadServlet extends HttpServlet { 
    protected void doPost(HttpServletRequest request, 
          HttpServletResponse response) throws ServletException, IOException { 

     Part filePart = request.getPart("file"); 

     if (filePart != null) { 
      // These prints out the correct data 
      System.out.println(filePart.getName()); 
      System.out.println(filePart.getSize()); 
      System.out.println(filePart.getContentType()); 
     } 


     //Need to read excel file as follows but how do I call the filepart here? 
     FileInputStream fis = new FileInputStream((File)filePart);//cast doesn't work 
     HSSFWorkbook wb = new HSSFWorkbook(fis); 
     HSSFSheet sheet = wb.getSheetAt(0); 
     for(Row row : sheet){ 
      for (Cell cell : row){ 
       System.out.println(cell.getStringCellValue()); 
      } 
     } 
    } 
} 

Antwort

0

Vielleicht getInputStream verwenden:

HSSFWorkbook wb = new HSSFWorkbook(filePart.getInputStream()); 

nicht versucht, aber diese Methode ist in der Schnittstelle von Teil.

+0

Funktioniert nicht. Compiler-Fehler besagt, dass Konstruktor nicht aufgelöst werden kann. – ksv99

+0

Meinst du, der Konstruktor von HSSFWorkbook benötigt tatsächlich einen FileInputStream anstelle eines einfachen InputStreams? In diesem Fall müssen Sie den empfangenen InputStream in eine Datei kopieren und erneut öffnen. Aber ich bezweifle: Aus dem Java-Dokument: – Heri

+0

HSSFWorkbook (java.io.InputStream s) Companion zu HSSFWorkbook (POIFSFileSystem), erstellt dies das POI-Dateisystem um Ihren InputStream, einschließlich aller Knoten. – Heri

-1

** Gläser hierfür erforderlich sind: cos-multipart.jar, jackson-Annotationen-2.2.3.jar, jackson-Core-2.2.3.jar, jackson-databind-2.2.3. Glas, poi-3.9.jar, wo Fileuploader der Name des Fileupload-Steuerelement in Sicht ist. **

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


      MultipartRequest multi = new MultipartRequest(request, ".",1024 * 1024 * 50); 

      String fileName = multi.getFilesystemName("fileUploader"); 
      String fileContent = multi.getContentType("fileUploader"); 
      FileInputStream file = new FileInputStream(fileName); 


       // l_obj_Out.print("Test2---->"); 
       //Create Workbook instance holding reference to .xlsx file 
       HSSFWorkbook workbook = new HSSFWorkbook(file); 

       //Get first/desired sheet from the workbook 
       HSSFSheet sheet = workbook.getSheetAt(0); 

       //Iterate through each rows one by one 
       Iterator<Row> rowIterator = sheet.iterator(); 
       String TenaID = "";   //where TenaID is column name in excel 
       String BuDoSeq = ""; 
       String BuDoDesc = ""; 
       String BuDoActive = ""; 

       List<Map<String, String>> output = new ArrayList<Map<String,String>>(); 

       while (rowIterator.hasNext()) 
       { 
        Row row = rowIterator.next(); 
        if(row.getRowNum() == 0){ 
         continue; 
        } 
        //For each row, iterate through all the columns 
        Iterator<Cell> cellIterator = row.cellIterator(); 
        Map<String, String> buyerValueMap = new LinkedHashMap<String, String>(); 
        TenaID = ""; 
        BuDoSeq = ""; 
        BuDoDesc = ""; 
        BuDoActive = ""; 

        Cell cell = null; 
        while (cellIterator.hasNext()) 
        { 

         cell = cellIterator.next(); 
         TenaID = cell.getStringCellValue(); 
         cell = cellIterator.next(); 
         BuDoSeq = ""+cell.getNumericCellValue(); 
         cell = cellIterator.next(); 
         BuDoDesc = cell.getStringCellValue(); 
         cell = cellIterator.next(); 
         BuDoActive = cell.getStringCellValue(); 
         //cell = cellIterator.next(); 


         buyerValueMap.put("TenaID", TenaID); 
         buyerValueMap.put("BuDoSeq", BuDoSeq); 
         buyerValueMap.put("BuDoDesc",BuDoDesc); 
         buyerValueMap.put("BuDoActive", BuDoActive); 




        } 
        output.add(buyerValueMap); 

    //    l_obj_Out.println(""); 
       } 
       file.close(); 
       ObjectMapper mapper = new ObjectMapper(); 
        response.setContentType("application/json"); 
        mapper.writeValue(response.getOutputStream(), output); 

    }` 

die Antwort wird das json Format der Datei hochgeladen enthält.

+1

Bitte neu formatieren. –

+0

Ich habe es neu formatiert, danke. – sonal

Verwandte Themen