springmvc +Extjs+swfUpload上传文件

java 文件

public void uploadFiles(HttpServletRequest req,HttpServletResponse res){
   //接收参数  
        String path1 = req.getRequestURI()+"/upload"; 
        System.out.println("____________req.getRequestURI():"+path1);  
        String path2 = req.getSession().getServletContext().getRealPath("/");  
        System.out.println("_________path2:"+path2);  
        List<FileEntity> fileList;  
        fileList = (List)req.getAttribute("fileList");  
        if(fileList==null){
         fileList = new ArrayList<FileEntity>();  
        }   
      //接收上传文件  
        String uploadSign = req.getParameter("upload");  
        String rootPath = req.getParameter("rootPath");  
        String path = req.getParameter("path");  
        if(rootPath == null){
         rootPath = "";  
        }
        rootPath = rootPath.trim();  
        if(rootPath.equals("")){  
              rootPath = path2+"/upload";  
        }  
        if(path == null) {  
             path = rootPath;  
        }else{  
            path = new String(Base64.decodeBase64(path.getBytes()));  
        }  
        System.out.println(path+"...path.getBytes():"+path.getBytes());  
        uploadSign = "1";  
        //上传操作  
        if(null != uploadSign && !"".equals(uploadSign)){  
         FileItemFactory factory = new DiskFileItemFactory();  
         ServletFileUpload upload = new ServletFileUpload(factory);  
         try{  
          List items = upload.parseRequest(req);  
          if(null != items){  
           Iterator itr = items.iterator();  
           int i = 0;  
           while(itr.hasNext()){  
            FileItem item = (FileItem)itr.next();  
            FileEntity file = new FileEntity();//_____________________  
            if(item.isFormField()){  
             continue;  
            }else{  
             //自由修改处三:可修改上传后的文件命名方式  
             SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddkkmmss");//以当前精确到秒的日期为上传的文件的文件名 
             SimpleDateFormat sdd=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
             String[] type1=item.getName().split("\\.");
             String type=null;
             if(type1.length==1){
              type=type1[1];
             }else{
              type=type1[type1.length-1];
             }
             System.out.println("——————————————————文件名称:"+item.getName());  
             System.out.println("从GBK转到UTF-8输出:"+new String(item.getName().getBytes("GBK"),"UTF-8")); 
             File savedFile = new File(path,sdf.format(new Date())+"."+type);  
             //把文件放到列表中,在前台显示  
             System.out.println("__________________服务器上对应的文件名称:"+sdf.format(new Date())+"."+type); 
             System.out.println("__________________完整路径:"+path1+"/"+sdf.format(new Date())+"."+type); 
             file.setId(sdf.format(new Date()));  
             file.setDate(sdd.format(new Date()));  
             file.setFilename(item.getName());  
             file.setFilepath(path1+"/"+sdf.format(new Date())+"."+type); 
                            file.setFilesize(item.getSize()+"");  
                            file.setFiletype(type);  
                            file.setMark("0");  
                            fileList.add(file);  
                            item.write(savedFile);  
            }  
           }  
          }  
          CtrlUtils.writeStr5Res("true", res);
         }catch(Exception e){  
          e.printStackTrace();  
         }  
        }  
 }

Extjs代码

function func_swfupload(centerTab, obj) {
 var keel={};
keel.UploadPanel = function(cfg){
 this.width = 510;
 this.height = 200;
 Ext.apply(this,cfg); 
 this.gp = new Ext.grid.GridPanel({
  border :false,
  store: new Ext.data.Store({
   fields:['id','name','type','size','state','percent']
  }),
     columns: [
      new Ext.grid.RowNumberer(),
         {header: '文件名', width: 100, sortable: true,dataIndex: 'name', menuDisabled:true},
         {header: '类型', width: 70, sortable: true,dataIndex: 'type', menuDisabled:true},
         {header: '大小', width: 100, sortable: true,dataIndex: 'size', menuDisabled:true,renderer:this.formatFileSize},
         {header: '进度', width: 150, sortable: true,dataIndex: 'percent',
 menuDisabled:true,renderer:this.formatProgressBar,scope:this},
         {header: '状态', width: 70, sortable: true,dataIndex: 'state', 
menuDisabled:true,renderer:this.formatFileState,scope:this},
         {header: '&nbsp;',width:40,dataIndex:'id', menuDisabled:true,renderer:this.formatDelBtn}      
     ]   
 });
 this.setting = {
  upload_url : this.uploadUrl, 
  flash_url : this.flashUrl,
  file_size_limit : this.fileSize || (1024*50) ,//上传文件体积上限,单位MB
  file_post_name : this.filePostName,
  file_types : this.fileTypes||"*.*",  //允许上传的文件类型 
        file_types_description : "All Files",  //文件类型描述
        file_upload_limit : "0",  //限定用户一次性最多上传多少个文件,在上传过程中,该数字会累加,如果设置为“0”,则表示没有限制
        //file_queue_limit : "10",//上传队列数量限制,该项通常不需设置,会根据file_upload_limit自动赋值             
  post_params : this.postParams||{savePath:'upload\\'},
  use_query_string : true,
  debug : false,
  button_cursor : SWFUpload.CURSOR.HAND,
  button_window_mode : SWFUpload.WINDOW_MODE.TRANSPARENT,
  custom_settings : {//自定义参数
   scope_handler : this
  },
  file_queued_handler : this.onFileQueued,
  swfupload_loaded_handler : function(){},// 当Flash控件成功加载后触发的事件处理函数
  file_dialog_start_handler : function(){},// 当文件选取对话框弹出前出发的事件处理函数
  file_dialog_complete_handler : this.onDiaogComplete,//当文件选取对话框关闭后触发的事件处理
  upload_start_handler : this.onUploadStart,// 开始上传文件前触发的事件处理函数
  upload_success_handler : this.onUploadSuccess,// 文件上传成功后触发的事件处理函数 
  swfupload_loaded_handler : function(){},// 当Flash控件成功加载后触发的事件处理函数  
  upload_progress_handler : this.uploadProgress,
  upload_complete_handler : this.onUploadComplete,
  upload_error_handler : this.onUploadError,
  file_queue_error_handler : this.onFileError
 };
 keel.UploadPanel.superclass.constructor.call(this,{    
  tbar : [
   {text:'添加文件',iconCls:'border_actioncolumn_add',ref:'../addBtn'},'-',
   {text:'上传',ref:'../uploadBtn',iconCls:'border_actioncolumn_upload',handler:this.startUpload,scope:this},'-',
   {text:'停止上传',ref:'../stopBtn',iconCls:'border_actioncolumn_stop',handler:this.stopUpload,scope:this,disabled:true},'-',
   {text:'删除所有',ref:'../deleteBtn',iconCls:'border_actioncolumn_clear',handler:this.deleteAll,scope:this},'-'
  ],
  layout : 'fit',
  items : [this.gp],
  listeners : {
   'afterrender':function(){
    var em = this.getTopToolbar().get(0).el.child('em');
    var placeHolderId = Ext.id();
    em.setStyle({
     position : 'relative',
     display : 'block'
    });
    em.createChild({
     tag : 'div',
     id : placeHolderId
    });
    this.swfupload = new SWFUpload(Ext.apply(this.setting,{
     button_width : em.getWidth(),
     button_height : em.getHeight(),
     button_placeholder_id :placeHolderId
    }));
    this.swfupload.uploadStopped = false;
    Ext.get(this.swfupload.movieName).setStyle({
     position : 'absolute',
     top : 0,
     left : -2
    });    
   },
   scope : this,
   delay : 100
  }
 });
}
Ext.extend(keel.UploadPanel,Ext.Panel,{
 toggleBtn :function(bl){
  this.addBtn.setDisabled(bl);
  this.uploadBtn.setDisabled(bl);
  this.deleteBtn.setDisabled(bl);
  this.stopBtn.setDisabled(!bl);
  this.gp.getColumnModel().setHidden(6,bl);
 },
  onUploadStart : function(file) {  
    var post_params = this.settings.post_params;  
    Ext.apply(post_params,{//处理中文参数问题
      //fileName : file.name,
         fileName : encodeURIComponent(file.name)
    });  
    this.setPostParams(post_params);  
 },
 startUpload : function() {
  if (this.swfupload) {
   if (this.swfupload.getStats().files_queued > 0) {
    this.swfupload.uploadStopped = false;
    this.toggleBtn(true);
    this.swfupload.startUpload();
   }
  }
 },
 formatFileSize : function(_v, celmeta, record) {
  return Ext.util.Format.fileSize(_v);
 },
 formatFileState : function(n){//文件状态
  switch(n){
   case -1 : return '未上传';
   break;
   case -2 : return '正在上传';
   break;
   case -3 : return '<div style="color:red;">上传失败</div>';
   break;
   case -4 : return '上传成功';
   break;
   case -5 : return '取消上传';
   break;
   default: return n;
  }
 },
 formatProgressBar : function(v){
  var progressBarTmp = this.getTplStr(v);
  return progressBarTmp;
 },
 getTplStr : function(v){
  var bgColor = "orange";
     var borderColor = "#008000";
  return String.format(
   '<div>'+
    '<div style="border:1px solid {0};height:10px;width:{1}px;margin:4px 0px 1px 0px;float:left;">'+  
     '<div style="float:left;background:{2};width:{3}%;height:10px;"><div></div></div>'+
    '</div>'+
   '<div style="text-align:center;float:right;width:40px;margin:3px 
0px 1px 0px;height:10px;font-size:12px;">{3}%</div>'+   
  '</div>', borderColor,(90),bgColor, v);
 },
 onUploadComplete : function(file) {
  if (this.getStats().files_queued > 0 && this.uploadStopped == false) {
   this.startUpload();
  }else{
   var me = this.customSettings.scope_handler;
   me.toggleBtn(false);
   me.linkBtnEvent();
  }  
 },
 onFileQueued : function(file) {
  var me = this.customSettings.scope_handler;
  var rec = new Ext.data.Record({
   id : file.id,
   name : file.name,
   size : file.size,
   type : file.type,
   state : file.filestatus,
   percent : 0
  })
  me.gp.getStore().add(rec);
 },
 onUploadSuccess : function(file, serverData) {
  var me = this.customSettings.scope_handler;
  if (serverData=='true') {
   var ds = me.gp.store;
   for(var i=0;i<ds.getCount();i++){
    var record =ds.getAt(i);
    if(record.get('id')==file.id){
     record.set('state', file.filestatus);
     record.commit();
    }
   }   
  }
  me.linkBtnEvent();
 },
 uploadProgress : function(file, bytesComplete, totalBytes){//处理进度条
  var me = this.customSettings.scope_handler;
  var percent = Math.ceil((bytesComplete / totalBytes) * 100);
        var ds = me.gp.store;
  for(var i=0;i<ds.getCount();i++){
   var record =ds.getAt(i);
   if(record.get('id')==file.id){
    record.set('percent', percent);
    record.set('state', file.filestatus);
    record.commit();
   }
  }
 },
 onUploadError : function(file, errorCode, message) {
  var me = this.customSettings.scope_handler;
  me.linkBtnEvent();
  var ds = me.gp.store;
  for(var i=0;i<ds.getCount();i++){
   var rec =ds.getAt(i);
   if(rec.get('id')==file.id){
    rec.set('percent', 0);
    rec.set('state', file.filestatus);
    rec.commit();
   }
  }
 },
 onFileError : function(file,n){
  switch(n){
   case -100 : tip('待上传文件列表数量超限,不能选择!');
   break;
   case -110 : tip('文件太大,不能选择!');
   break;
   case -120 : tip('该文件大小为0,不能选择!');
   break;
   case -130 : tip('该文件类型不可以上传!');
   break;
  }
  function tip(msg){
   Ext.Msg.show({
    title : '提示',
    msg : msg,
    width : 280,
    icon : Ext.Msg.WARNING,
    buttons :Ext.Msg.OK
   });
  }
 },
 onDiaogComplete : function(){
  var me = this.customSettings.scope_handler;
  me.linkBtnEvent();
 },
 stopUpload : function() {
  if (this.swfupload) {
   this.swfupload.uploadStopped = true;
   this.swfupload.stopUpload();
  }
 },
 deleteAll : function(){
  var ds = this.gp.store;
  for(var i=0;i<ds.getCount();i++){
   var record =ds.getAt(i);
   var file_id = record.get('id');
   this.swfupload.cancelUpload(file_id,false);   
  }
  ds.removeAll();
  this.swfupload.uploadStopped = false;
 },
 formatDelBtn : function(v){
  return "<a href='#' id='"+v+"'  style='color:blue' class='link-btn' ext:qtip='移除该文件'>移除</a>";
 },
 linkBtnEvent : function(){
  Ext.select('a.link-btn',false,this.gp.el.dom).on('click',function(o,e){
   var ds = this.gp.store;
   for(var i=0;i<ds.getCount();i++){
    var rec =ds.getAt(i);
    if(rec.get('id')==e.id){
     ds.remove(rec);
    }
   }   
   this.swfupload.cancelUpload(e.id,false);
  },this);
 }
});
Ext.reg('uploadPanel',keel.UploadPanel);

//-------------------------------------------
 var title = obj.text;
 
 var searchPanel = new Ext.Panel({
  layout : 'fit',
  border : false,
  id : 'tab' + obj.id,
  title : title,
  tabTip : title,
  closable : true,
  tbar : [{
     tooltip : '新建',
     text : '新建',
     iconCls : 'border_actioncolumn_add',
     handler : function() {
      new Ext.Window({
       width : 650,
       title : 'swfUpload demo',
       height : 300,
       layout : 'fit',
       items : [
        {
         xtype:'uploadPanel',
         border : false,
         fileSize : 1024*550,//限制文件大小
         uploadUrl : 'uploadFiles.swfUpload',
         flashUrl :  basePath+'/swfupload.swf',
         fileTypes : '*.*'//可上传文件类型
        }
       ]
      }).show();
     }
    }]
 });
 centerTab.add(searchPanel);
 centerTab.activate(Ext.getCmp('tab' + obj.id));
}


你可能感兴趣的:(springmvc +Extjs+swfUpload上传文件)