flex上传excel文件到服务器上

来源:互联网 发布:刺客信条起源 知乎 编辑:程序博客网 时间:2024/04/28 08:06

要先写个服务器解析excel的selevt文件,解析成XML文件,在通过XML文件显示在界面上

public class upload extends HttpServlet {

 private static final long serialVersionUID = 1L;
 public upload(){
  super();
 }
 
 protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
  try{
   request.setCharacterEncoding("utf-8");
   //response.setContentType("text/xml;charset=utf-8");
   response.setContentType("text/xml;charset=utf-8");
   
   PrintWriter out=response.getWriter();
      //  创建基于磁盘的文件工厂 
            DiskFileItemFactory factory  =   new  DiskFileItemFactory();
             //  设置直接存储文件的极限大小,一旦超过则写入临时文件以节约内存。默认为 1024 字节 
            factory.setSizeThreshold( 1024   *   1024 );
            //  创建上传处理器,可以处理从单个 HTML 上传的多个上传文件。 
            ServletFileUpload upload  =   new  ServletFileUpload(factory);
             //  最大允许上传的文件大小 
            upload.setSizeMax( 1024   *   1024 );
            //  处理上传 
            List fileItems = upload.parseRequest(request);
            Iterator iter = fileItems.iterator();
            
            for(;iter.hasNext();){
             FileItem fileItem=(FileItem)iter.next();
             if(fileItem.isFormField()){
              //out.println( "form field : " + fileItem.getFieldName() + ", " + fileItem.getString() );  
              System.out.println("当前是表单项");
             }else{
              // 当前是一个上传的文件       
        String fileName = fileItem.getName();  
        System.out.println(fileName);
        File tempFile=File.createTempFile(fileName,"xls");
        fileItem.write( tempFile ); 
        //fileItem.write( new File( "d:/temp.xls"));
        PoiFunction readExcel = new PoiFunction(tempFile);
        try{
         readExcel.open();
         int rowCount=readExcel.getRowCount();
         StringBuffer sb= new StringBuffer("<records>");
         if (readExcel.readExcelLine(0) !=null){
          sb.append("<row>");
          String[] rows = readExcel.readExcelLine(0);
          for (int j = 0; j < rows.length; j++) {
           sb.append("<col"+(j+1)+">"+rows[j] + "</col"+(j+1)+">");
          }
          sb.append("</row>");
         }
         for(int i=1;i<rowCount;i++){
          if (readExcel.readExcelLine(i) ==null) break;
          sb.append("<row no=/""+(i-1)+"/">");
          String[] rows = readExcel.readExcelLine(i);
          for (int j = 0; j < rows.length; j++) {
           sb.append("<col"+(j+1)+">"+rows[j] + "</col"+(j+1)+">");
          }
          sb.append("</row>");
          System.out.println(sb.toString());
         }
         sb.append("</records>");
         out.print(sb.toString());
         
        }catch(IOException e){
         e.printStackTrace();
         out.print("<poiError>文件格式错误,请检查</poiError>");
        }
             }
              
            }
   
  }catch (Throwable t){
   t.printStackTrace();
  }
 }
}

 

 

在FLEX中开发

先注册事件

 private static const UPLOAD_URL:String = ForwarderModel.getInstance().serverUrl+"/common/upload";
     //使用/common/uploadexcel 路径,对应 uploadexcel Servlet来处理。
     [Bindable]
     public var resultXml:XML;
     
        public function onBrowse():void {
            req = new URLRequest();
            req.url = UPLOAD_URL;
            file = new FileReference();
            file.addEventListener(Event.SELECT, onSelect);    
            file.addEventListener(ProgressEvent.PROGRESS, onProgress);
            file.addEventListener(Event.COMPLETE, onComplete);
            file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, onDone);
            
            file.browse();
            //file.browse([filter]);
        }
            
        private function onSelect(event:Event):void {
            this.visible=true;
            var file:FileReference = FileReference(event.target);
           file.upload(req, "file");
          //file.upload(req,"file");
            this.indeterminate = true;
         
            
        }
        
        private function onProgress(event:ProgressEvent):void {
            this.label = "文件上传中...";
            this.minimum = 0;
            this.maximum = event.bytesTotal;
            this.setProgress(event.bytesLoaded, event.bytesTotal);
        }
        
        private function onComplete(event:Event):void {
            this.label = "文件处理中...";
            this.indeterminate = true;
        }
        
      

        
        private function onDone(event:DataEvent):void {
            this.label = "文件加载完成!";
            this.indeterminate = false;
            this.visible=false;
            try{
             resultXml=XML(event.data); 
            }catch (e:Error){
             Alert.show(event.data,"error");
             return;
            }
            _callback(resultXml);

        }

原创粉丝点击