2011-06-07 76 views
0

我正在開發一個測試自動化工具在linux系統。我沒有寫在服務器上的tomcat目錄的權限。我需要開發一個應用程序,我們可以選擇一個excel文件,以便excel內容自動存儲在已經存在的表格中。使用apache文件上傳excel文件上傳

對於此章節目標我寫的形式來選擇,其發佈到一個servlet CommonsFileUploadServlet一個文件我在哪裏存儲上傳的文件,然後調用ReadExcelFile類讀取文件路徑和文件創建的數據的載體,其爲用於在數據庫中存儲數據。

我的問題是,我無法將上傳的文件存儲在目錄中。是否有必要擁有tomcat的權限來執行此操作。我可以將文件存儲在我的系統上,並通過路徑ReadExcelFile.class

請指引我

我的代碼如下:在JSP

表CommonsFileUploadServlet課程代碼:

public void init(ServletConfig config) throws ServletException { 
    super.init(config); 

} 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    PrintWriter out = response.getWriter(); 
    response.setContentType("text/plain"); 
    out.println("<h1>Servlet File Upload Example using Commons File Upload</h1>"); 
    DiskFileItemFactory fileItemFactory = new DiskFileItemFactory(); 
    fileItemFactory.setSizeThreshold(1*1024*1024); 
    fileItemFactory.setRepository(new File("/home/example/Documents/Project/WEB-INF/tmp")); 
    ServletFileUpload uploadHandler = new ServletFileUpload(fileItemFactory); 
    try { 
     List items = uploadHandler.parseRequest(request); 
     Iterator itr = items.iterator(); 
     while(itr.hasNext()) { 
      FileItem item = (FileItem) itr.next(); 
      if(item.isFormField()) { 
      out.println("File Name = "+item.getFieldName()+", Value = "+item.getString()); 
      } else { 
       out.println("Field Name = "+item.getFieldName()+ 
        ", File Name = "+item.getName()+ 
        ", Content type = "+item.getContentType()+ 
        ", File Size = "+item.getSize()); 
      File file = new File("/",item.getName()); 
        String realPath = getServletContext().getRealPath("/")+"/"+item.getName(); 
       item.write(file); 
     ReadExcelFile ref= new ReadExcelFile(); 
      String res=ref.insertReq(realPath,"1"); 
      } 

      out.close(); 
     } 
    }catch(FileUploadException ex) { 
     log("Error encountered while parsing the request",ex); 
    } catch(Exception ex) { 
     log("Error encountered while uploading file",ex); 
    } 

} }

ReadExcelFile代碼:

公共靜態字符串insertReq(字符串文件名,字符串SNO){

//Read an Excel File and Store in a Vector 

    Vector dataHolder=readExcelFile(fileName,sno); 

//store the data to database 
    storeCellDataToDatabase(dataHolder); 

} 
public static Vector readExcelFile(String fileName,String Sno) 
{ 
    /** --Define a Vector 
     --Holds Vectors Of Cells 
    */ 
    Vector cellVectorHolder = new Vector(); 
     try{ 
    /** Creating Input Stream**/ 
    //InputStream myInput= ReadExcelFile.class.getResourceAsStream(fileName); 
    FileInputStream myInput = new FileInputStream(fileName); 

    /** Create a POIFSFileSystem object**/ 
    POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput); 

    /** Create a workbook using the File System**/ 
    HSSFWorkbook myWorkBook = new HSSFWorkbook(myFileSystem); 
int s=Integer.valueOf(Sno); 
    /** Get the first sheet from workbook**/ 
    HSSFSheet mySheet = myWorkBook.getSheetAt(s); 

    /** We now need something to iterate through the cells.**/ 
     Iterator rowIter = mySheet.rowIterator(); 

     while(rowIter.hasNext()) 
{ 
      HSSFRow myRow = (HSSFRow) rowIter.next(); 
      Iterator cellIter = myRow.cellIterator(); 
      Vector cellStoreVector=new Vector(); 
      short minColIndex = myRow.getFirstCellNum(); 
    short maxColIndex = myRow.getLastCellNum(); 
    for(short colIndex = minColIndex; colIndex < maxColIndex; colIndex++) 
{ 
HSSFCell myCell = myRow.getCell(colIndex); 
if(myCell == null) 
{ 
    cellStoreVector.addElement(myCell); 
} 
else 
{ 
cellStoreVector.addElement(myCell); 
} 
} 
      cellVectorHolder.addElement(cellStoreVector); 
    } 
    }catch (Exception e){e.printStackTrace(); } 
    return cellVectorHolder; 
} 

私有靜態無效storeCellDataToDatabase(矢量dataHolder) {

Connection conn; 
    Statement stmt; 
    String query; 

    try 
    { 
     // get connection and declare statement 
     int z; 
      for (int i=1;i<dataHolder.size(); i++) 
      { 
       z=0; 
       Vector cellStoreVector=(Vector)dataHolder.elementAt(i); 
       String []stringCellValue=new String[10]; 
     for (int j=0; j < cellStoreVector.size();j++,z++) 
     { 
      HSSFCell myCell = (HSSFCell)cellStoreVector.elementAt(j); 
      if(myCell==null) 
    stringCellValue[z]=" "; 
    else 
    stringCellValue[z] = myCell.toString(); 
     } 

    try 
     { 
      //inserting into database 
     } 
     catch(Exception error) 
     { 
      String e="Error"+error; 
      System.out.println(e); 
     } 
      } 
     stmt.close(); 
     conn.close(); 

     System.out.println("success"); 
    } 
    catch(Exception error) 
    { 
     String e="Error"+error; 
     System.out.println(e); 
    } 

} 

回答

1

POI會樂意從一箇舊的InputStream打開,它不需要成爲一個文件之一。

我建議你看看Commons FileUpload Streaming API並考慮剛好路過的Excel部分直POI不接觸磁盤

+0

thanq .....我會考慮它..... – user662175 2011-06-09 05:32:18