The applications depends on a bunch of Jar file such as
- Apache commons fileupload
- Apache commons IO
- Apache POI
- Apache XML Beans
- Google JSON library Gson
- dom4j
Application Starting point - index.html
<html> <head> <title>Java Excel File Upload and Parsing</title> <link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css"> <style type="text/css"> .upload-icon { background: url('extjs/icons/fam/image_add.png') no-repeat 0 0 !important; } </style> <script type="text/javascript" src="extjs/ext-all-debug.js"></script> <script type="text/javascript" src="app.js"></script> </head> <body> <div id="fileUpload"> </div> </body> </html>
Application JavaScript file - apps.js
Ext.Loader.setConfig({ enabled: true }); Ext.application({ name: 'ExcelApp', appFolder: 'app', controllers: [ 'FileUpload' ], launch: function() { Ext.widget('fileuploadform'); } });
Application Excel file Upload Form View - MyForm.js
Ext.define('ExcelApp.view.MyForm', { extend: 'Ext.form.Panel', alias : 'widget.fileuploadform', width: 500, frame: true, title: 'Order File Upload Form', bodyPadding: '10 10 0', renderTo: 'fileUpload', defaults: { anchor: '100%', allowBlank: false, msgTarget: 'side', labelWidth: 75 }, items: [{ xtype: 'textfield', name: 'filename', fieldLabel: 'File Name' },{ xtype: 'filefield', id: 'myFile', emptyText: 'Select a File to Upload', fieldLabel: 'Select a File', name: 'fileSelected', buttonText: '', buttonConfig: { iconCls: 'upload-icon' } }], buttons: [{ text: 'Upload', action: 'uploadFile' }, { text: 'Reset Form', handler: function() { this.up('form').getForm().reset(); } }] });
ExtJs application controller - FileUpload.js
Ext.define('ExcelApp.controller.FileUpload', { extend : 'Ext.app.Controller', //define the views views : ['MyForm'], refs : [{ ref : 'myForm', selector : 'fileuploadform' }], //special method that is called when your application boots init : function() { //control function makes it easy to listen to events on //your view classes and take some action with a handler function this.control({ //when the viewport is rendered 'viewport > panel' : { render : this.onPanelRendered }, //when you click Upload file button 'fileuploadform button[action=uploadFile]' : { click : this.uploadFile } }); }, onPanelRendered : function() { //just a console log to show when the panel is rendered console.log('The panel was rendered'); }, uploadFile : function(button) { //just a console log to show when the file Upload starts console.log('File Upload in progress'); var form = button.up('form').getForm(); if(form.isValid()){ form.submit({ url: 'ExcelOrderFileUpload', waitMsg: 'Uploading your file...', scope: this, success: function(form, action){ // server responded with success = true response = Ext.decode(action.response.responseText); if(response.success){ this.processResponse(response); form.reset(); } }, failure: function(form, action){ if (action.failureType === CONNECT_FAILURE) { Ext.Msg.alert('Error', 'Status:'+action.response.status+': '+ action.response.statusText); } if (action.failureType === SERVER_INVALID){ // server responded with success = false Ext.Msg.alert('Invalid', action.result.errormsg); } } }); } }, processResponse : function(response){ responseMessage = response.message; Ext.MessageBox.show({ closable: false, width:450, title:'<b>Excel Order File Upload Successful!</b>', msg: responseMessage, buttons: Ext.MessageBox.OK, fn: this.showResult, icon: Ext.MessageBox.INFO }); }, showResult : function(btn){ console.log('You clicked the ' + btn + ' button'); } });
Java Servlet for File Upload and Excel file parsing - ExcelOrderFileUpload
package com.as400samplecode; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; import java.util.List; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.FilenameUtils; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import com.google.gson.JsonObject; public class ExcelOrderFileUpload extends HttpServlet { private static final long serialVersionUID = 1L; private static final String TMP_DIR_PATH = "/MyTempFiles"; private File tmpDir; private static final String DESTINATION_DIR_PATH ="/MySavedFiles"; private File destinationDir; public ExcelOrderFileUpload() { super(); } public void init(ServletConfig config) throws ServletException { super.init(config); String realPath = getServletContext().getRealPath(TMP_DIR_PATH); tmpDir = new File(realPath); if(!tmpDir.isDirectory()) { throw new ServletException(TMP_DIR_PATH + " is not a directory"); } realPath = getServletContext().getRealPath(DESTINATION_DIR_PATH); destinationDir = new File(realPath); if(!destinationDir.isDirectory()) { throw new ServletException(DESTINATION_DIR_PATH+" is not a directory"); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //PrintWriter to send the JSON response back PrintWriter out = response.getWriter(); //set content type and header attributes response.setContentType("text/html"); response.setHeader("Cache-control", "no-cache, no-store"); response.setHeader("Pragma", "no-cache"); response.setHeader("Expires", "-1"); DiskFileItemFactory fileItemFactory = new DiskFileItemFactory (); //Set the size threshold, above which content will be stored on disk. fileItemFactory.setSizeThreshold(1*1024*1024); //1 MB //Set the temporary directory to store the uploaded files of size above threshold. fileItemFactory.setRepository(tmpDir); ServletFileUpload uploadHandler = new ServletFileUpload(fileItemFactory); JsonObject myObj = new JsonObject(); String fileName = null; String fullName = null; File file = null; try { //Parse the request List items = uploadHandler.parseRequest(request); Iterator iterator = items.iterator(); while(iterator.hasNext()) { FileItem item = (FileItem) iterator.next(); //Handle Form Fields if(item.isFormField()) { System.out.println("Field Name = " + item.getFieldName() + ", Value = " + item.getString()); if(item.getFieldName().trim().equalsIgnoreCase("filename")){ fileName = item.getString().trim(); } } //Handle Uploaded files. else { System.out.println("Field Name = " + item.getFieldName()+ ", File Name = "+ item.getName()+ ", Content type = "+item.getContentType()+ ", File Size = "+item.getSize()); fullName = item.getName().trim(); //Write file to the ultimate location. file = new File(destinationDir,item.getName()); item.write(file); } } int count = 0; String extension = FilenameUtils.getExtension(fullName); if(extension.trim().equalsIgnoreCase("xlsx")){ count = processExcelFile(file); } else if(extension.trim().equalsIgnoreCase("xls")){ //process your binary excel file } if(extension.trim().equalsIgnoreCase("csv")){ //process your CSV file } myObj.addProperty("success", true); myObj.addProperty("message", count + " item(s) were processed for file " + fileName); out.println(myObj.toString()); } catch(FileUploadException ex) { log("Error encountered while parsing the request",ex); myObj.addProperty("success", false); out.println(myObj.toString()); } catch(Exception ex) { log("Error encountered while uploading file",ex); myObj.addProperty("success", false); out.println(myObj.toString()); } out.close(); } private int processExcelFile(File file){ int count = 0; try{ // Creating Input Stream FileInputStream myInput = new FileInputStream(file); // Create a workbook using the File System XSSFWorkbook myWorkBook = new XSSFWorkbook(myInput); // Get the first sheet from workbook XSSFSheet mySheet = myWorkBook.getSheetAt(0); /** We now need something to iterate through the cells.**/ Iterator<Row> rowIter = mySheet.rowIterator(); while(rowIter.hasNext()){ XSSFRow myRow = (XSSFRow) rowIter.next(); Iterator<Cell> cellIter = myRow.cellIterator(); while(cellIter.hasNext()){ XSSFCell myCell = (XSSFCell) cellIter.next(); //get cell index System.out.println("Cell column index: " + myCell.getColumnIndex()); //get cell type System.out.println("Cell Type: " + myCell.getCellType()); //get cell value switch (myCell.getCellType()) { case XSSFCell.CELL_TYPE_NUMERIC : System.out.println("Cell Value: " + myCell.getNumericCellValue()); break; case XSSFCell.CELL_TYPE_STRING: System.out.println("Cell Value: " + myCell.getStringCellValue()); break; default: System.out.println("Cell Value: " + myCell.getRawValue()); break; } System.out.println("---"); if(myCell.getColumnIndex() == 0 && !myCell.getStringCellValue().trim().equals("") && !myCell.getStringCellValue().trim().equals("Item Number")){ count++; } } } } catch (Exception e){ e.printStackTrace(); } return count; } }
No comments:
Post a Comment
NO JUNK, Please try to keep this clean and related to the topic at hand.
Comments are for users to ask questions, collaborate or improve on existing.