开发者

excel file upload using apache file upload

I am developing an testing automation tool in linux system. I dont have write permissions for tomcat directory which is located on server. I need to develop an application where we can select an excel file so that the excel content is automatically stored in already existing table.

For this pupose i have written an form to select an file which is posted to a servlet CommonsFileUploadServlet where i am storing the uploaded file and then calling ReadExcelFile class which reads the file path and create a vector for data in file which is used to sstore data in database.

My problem is that i am not able to store the uploaded file in directory. Is it necessary to have permission rights for tomcat to do this. Can i store the file on my system and pass the path to ReadExcelFile.class

Please guide me

My code is as follows:

Form in jsp

CommonsFileUploadServlet class code:

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 code:

public static String insertReq(String fileName,String 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;
}

private static void storeCellDataToD开发者_JAVA技巧atabase(Vector 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);
    }

}


POI will happily open from an old InputStream, it needn't be a File one.

I'd suggest you look at the Commons FileUpload Streaming API and consider just passing the excel part straight to POI without touching the disk

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜