качване на файл в excel с помощта на качване на файл в apache

Разработвам инструмент за автоматизация на тестване в Linux система. Нямам разрешения за запис за директория tomcat, която се намира на сървъра. Трябва да разработя приложение, където можем да изберем excel файл, така че съдържанието на excel да се съхранява автоматично във вече съществуваща таблица.

За тази цел написах формуляр за избор на файл, който се публикува в сервлет 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 код:

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 storeCellDataToDatabase(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);
    }

}

person user662175    schedule 07.06.2011    source източник


Отговори (1)


POI с радост ще се отвори от стар InputStream, не е необходимо да е File.

Предлагам ви да разгледате Commons FileUpload Streaming API и да помислите просто за предаване на частта за excel направо към POI, без да докосвате диска

person Gagravarr    schedule 08.06.2011